一本适合我这种初学者看的书(电子书真香)。
1.
int *pn = new int;
new操作符根据后面的类型(int)来确定需要多少字节的内存。找到后,返回该内存的地址给 pn 这个指针。所以在delete的时候,释放的是该内存的地址而不是pn这个指针。
那么,如果delete之后再输出pn的值以及改变*pn的话,会有什么发生呢?
按照 https://blog.csdn.net/qq_36570733/article/details/80043321 的说法 自己写一个代码实现,但是得到的结论完全不同233。
#include<iostream>
using namespace std;
int main()
{
int *pr=new int;
*pr = 90;
cout<<"pr = "<<pr<<endl;
cout<<"*pr = "<<*pr<<endl<<endl;
delete pr;
cout<<"delete掉pr所指向的内存,并new一个新的空间给ptr"<<endl<<endl;
int *ptr=new int;
*ptr = 100;
*pr=20;
cout<<"ptr = "<<ptr<<endl;
cout<<"*ptr = "<<*ptr<<endl<<endl;
cout<<"将*pr改为20之后"<<endl;
cout<<"pr = "<<pr<<endl;
cout<<"*pr = "<<*pr<<endl;
delete ptr;
return 0;
}
结论不同之处
博客:编译器默认将释放掉的内存空间回收然后分配给新开辟的空间,p和p1指向的是同一块内存单元。
我: 鬼嘞。得不到什么结论,不知道是电脑的差别还是编译器的差别。反正我就觉得他的结论有点问题,先不说字节对齐的问题,就算先后都是int型,分配到的地址都不一样啊。
所以有一个问题:
new分配的空间delete掉了之后,pr指向的是原来的空间,但是为什么*pr还可以起作用??这个空间不是被释放了吗????
2.
在定义变量的时候是在程序编译时分配空间,但是new的话是在程序运行时分配空间
看这个 https://blog.csdn.net/yzhang6_10/article/details/52069318 反正我是一知半解
翻到最下面, 来源:CSAPP 2333