我不明白为什么将值重新分配给 *p 会显示错误。我们删除了它在运行时创建的资源。
int a = 7, b = 8;
int *p = new int;
*p = a;
cout<<*p<<" "<<p<<endl;
delete p;
cout<<*p<<" "<<p;
*p = &b; // error
cout<<"\n"<<*p<<" "<<p;
最佳答案
在调用
delete p;
之后解引用p
的行为未定义。不要那样做。这很容易。现在更难的一点是:在调用delete
之后读取p
的值(更不用说取消引用它)的行为也是未定义的!所以也不要那样做。 (非正式地将指针放回未初始化状态。)*p = &b;
是错字。您需要p = &b;
将指针p
分配 到b
的地址。如果您更正了该拼写错误,您可以自由读取p
的值并再次取消引用它。
关于c++ - 具有运行时分配的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50103619/