网站做广告投放 做销售线索预估/怎么做
对 delete *ptr 的理解:
(1)delete 只是表示“将内存资源还给系统”,当下次程序再调用new申请内存的时候,系统就可以将这块内存重新分配给使用者;
(2)而实际上调用delete *ptr; 之后,当前程序仍可以操作 *ptr指向的这块内存,这个指针也一直存在(“空悬指针”);
(3)如果再次对 ptr调用delete(重复释放),则程序将会core dump(理由是此时ptr可能是其他程序正在使用的一块新内存,旧程序不应该对其释放);
(4)所以正确的做法应该是在 delete后将 ptr指针置为空,这样的好处是避免改写ptr内存上的内容,且delete nullptr;释放一个空指针不会引发程序错误。
访问一个 null空指针将会引发 段错误,delete释放一个空指针则不会。
示例一:
#include <iostream>
using namespace std;int main() {int *ptr = new int(10);cout << ptr << ' ' << *ptr << endl;delete ptr;cout << ptr << ' ' << *ptr << endl;return 0;
}
输出结果:
0x7f9a88405800 10
0x7f9a88405800 10
示例二:
#include <iostream>
using namespace std;int main() {int *ptr = new int(10);cout << ptr << ' ' << *ptr << endl;delete ptr;ptr = nullptr;cout << ptr << endl; //cout<<*ptr; 访问空指针将会引发段错误return 0;
}
输出结果:
0x7ff715405800 10
0x0