|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 1094570635 于 2023-3-8 06:26 编辑
#include<iostream>
void test01()
{
int a = 10;
int b = 20;
int c = 30;
int d = 40;
int* p1 = new int(a);
int* p2 = new int(b);
int* p3 = new int(c);
int* p4 = new int(d);
int* p5 = &d;
int**pp = new int* [3];
pp[0] = p1;
pp[1] = p2;
pp[2] = p3;
for (int i=0;i<3;i++ )
{
std::cout << *pp[i] << " ";
}
std::cout << std::endl;
delete pp[0];
pp[0] = p4;
for (int i = 0; i < 3; i++)
{
std::cout << *pp[i] << " ";
}
std::cout << std::endl;
delete pp[0];
pp[0] = p5;
//delete pp[0]; //释放出错
delete []pp;
pp = NULL;
std::cout << pp << " ";
}
int main()
{
test01();
return 0;
}
堆区创建了指针型的数组,使用了二级指针pp接收。
那么问题来了,释放数组pp[0]的时候,堆区数据被释放了,我用 pp[0]接收栈区数据p5,此时再释放就出错了。我想应该是栈区数据不能手动释放的问题。
但是我 改用delete []pp以后,数据却可以释放掉,为什么呢。
|
|