我的问题:
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)
我自己写这篇文章是为了理解指针并理解(也迷失)动态new和delete.
我的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 …