c++ - 指针和内存泄漏

标签 c++ pointers memory-leaks

下面的程序有问题吗?我是否必须删除指针才能避免内存泄漏?

请帮忙。

#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/

相关文章:

c++ - C++ 中的奇怪类型

c++ - 使用 std::copy 时 istream_iterator 无效

c++ - 在 C++ 中编写函数

CFDataCreateWithBytesNoCopy() 不能与 "const char var[xx]"一起使用,但可以与 malloc 一起使用吗?

在 c 中打印时类型转换指针差异

c++ - 有人可以用 open mpi 解释这个 valgrind 输出吗?

c++ - 如何访问模板参数的成员? "Member access to incomplete type"

c - 指向 char 数组的指针的值与普通 char 指针的值

c - 我需要在 C 中释放 strerror() 的结果吗?

javascript - 带有 $http 的 AngularJS 指令会造成内存泄漏 - .resolve 似乎不起作用?