小编Bem*_*i77的帖子

指针和动态内存分配

我的问题:

int* x = new int;
cout << x<<"\n";
int* p;
cout << p <<"\n";
p = x;
delete p;
cout << p <<"\n";
Run Code Online (Sandbox Code Playgroud)

我自己写这篇文章是为了理解指针并理解(也迷失)动态newdelete.

我的XCode可以编译程序并返回以下结果:

 0x100104250
 0x0
0x100104250
Run Code Online (Sandbox Code Playgroud)

我知道我只能在动态分配的内存上调用delete.但是,我p在上面的程序中调用了delete 并编译.

谁有人向我解释这个?我为什么要删除p

此外,我发现程序是否更改为以下内容:

 int* x = new int;
 int* p;
 cout << p <<"\n";
 delete p;
 cout << p <<"\n";
Run Code Online (Sandbox Code Playgroud)

然后我的Xcode再次编译并返回给我:

 0x0
 0x0
 Program ended with exit code: 0
Run Code Online (Sandbox Code Playgroud)

现在,我完全迷失了:(.有人可以解释一下吗?为什么我可以删除,p因为它没有任何关系x


由于Xcode编译成功,我认为上述两个程序对于计算机是正确的.但是,我认为这又是"只对动态分配的内存进行调用删除"的陈述.或者可能,我没有完全理解什么是指针以及什么是动态分配的内存.我在网上搜索时找到了这篇文章.但我不认为这就像我的情况.

请帮帮我.


我想再问一个问题.代码在这里是关于二叉搜索树.从第28行到第32行,它涉及删除一个孩子的节点.我把这部分代码放在这里,万一网页链接不起作用.

else …

c++ pointers

5
推荐指数
1
解决办法
2270
查看次数

标签 统计

c++ ×1

pointers ×1