gpt4 book ai didi

c++ - 指针和内存泄漏

转载 作者:太空宇宙 更新时间:2023-11-04 16:28:30 24 4
gpt4 key购买 nike

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

请帮忙。

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com