下面的程序有问题吗?我是否必须删除指针才能避免内存泄漏?
请帮忙。
#include<iostream>
using namespace std;
int main()
{
int x=2, y=3;
int *p,*q;
int **pp;
cout<<x<<","<<y<<endl;//x=2,y=3
p=&x;
q=&y;
cout<<*p<<","<<*q<<endl;//*p=2,*q=3
p=new int [5];
p[2]=9;
q=p+x;
p[0]=8;
cout<<*p<<","<<*q<<endl;//*p=8,*q=9
pp=&p;
cout<<pp[0][2]<<endl;//pp[0][2]=9
q=new int;
p=q;
*p=5;
*q=7;
cout<<*p<<","<<*q<<endl;//*p=7,*q=7
delete p;
p=NULL;
}
最佳答案
你正在为 p 和 q 分配内存:
p=new int [5];
/* ... */
q=new int;
但您只是使用无效运算符释放 p,因为应使用 delete[] 删除数组。你应该在某个时候释放 p 和 q 使用:
delete[] p;
delete q;
请注意,由于您正在使指针指向另一个指针的已分配缓冲区,因此您可能必须检查哪个 delete
运算符对应于哪个 new
操作。
您应该在分配给 new[]
的缓冲区上使用 delete[]
并在分配给 new< 的缓冲区上使用
。 delete
/
关于c++ - 指针和内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9695261/