第一次学习指针。所以ptr被赋值为n n1,最后是n2但是n和n1从来没有被删除过。希望你能理解。
#include <iostream>
using namespace std;
int main() {
int n = 5;
int n1 = 7;
int n2 = 8;
int *ptr;
ptr = &n;
ptr = &n1;
ptr = &n2;
cout << ptr << endl;
cout << *ptr << endl;
return 0;
}
堆栈通常是分配给应用程序中每个线程的(相对)较小的固定大小的内存区域。函数使用的堆栈内存在该函数结束时自动释放。
堆栈溢出是指程序耗尽堆栈内存。这通常有两个原因:
- 在堆栈上创建一个大对象,例如1,000,000个
int
的数组可能会使用4mb的堆栈内存,但在Windows上默认的堆栈大小通常是1mb,所以你的程序在创建数组时会遇到堆栈溢出。 - 发生太多级别的函数调用(例如无限递归)。每次调用函数时,都会使用一定数量的堆栈内存来存储该函数的变量以及参数、返回地址等。根据每个函数使用的内存量,可以在不导致堆栈溢出的情况下执行的嵌套函数调用的数量会有所不同。例如,如果你在堆栈上创建大数组,你可以做更少的递归层次,而不是每个函数只有几个整数变量。
这两种情况都没有发生在你的代码中,你在堆栈上创建了4个变量并给它们赋值。该行为定义良好,并且内存将在main
结束时自动释放。
好的。首先,您没有将指针ptr
分配给&n
,&n1
和&n2
。你只是重写了赋值,所以在代码的最后,ptr
只被赋值给&n2
。
其次,当存在内存泄漏时,当您使用new
关键字来分配内存而不使用delete
来释放内存时,就会发生MEMORY OVERFLOW。
#include<iostream>
using namespace std;
int main()
{
int* pointer;
pointer=new int;
*pointer=24;
cout<<*pointer;
delete pointer;
return 0;
}
在这种情况下省略delete pointer;
将是内存溢出的一个例子。
但是,堆栈溢出是另一回事,它不适用于这里。
我希望这对你有帮助!