C++ 具有运行时分配的指针
我不明白为什么将值重新指定给*p会显示错误。我们已经删除了它在运行时创建的资源C++ 具有运行时分配的指针,c++,C++,我不明白为什么将值重新指定给*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<<" "<&
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;
inta=7,b=8;
int*p=新的int;
*p=a;
cout除了删除指针而不给它一个新地址之外,问题是当前您正试图将p
指针的值分配给int的内存地址
调用delete p后取消引用p
的行为代码>未定义。不要那样做。这很简单。现在来看更难的一点:调用delete
后读取p
值(更不用说取消引用)的行为也未定义!所以也不要这样做。(非正式地将指针放回未初始化状态。)
*p=&b代码>是一个输入错误。您需要p=&b
将指针p
分配到b
的地址。如果您修复了该输入错误,您可以自由读取p
的值并再次取消引用
*p
是一个int
,你的意思是p=&b
还是*p=b
?*p
在删除p之后
是UB。@S.M.这是另一个问题,但错误是因为赋值不正确。p=&b
将是有效的,但是尝试将b
的地址分配给*p
,例如,如果没有强制转换,则不支持指向int
的指针,在这种情况下,由于*p
不再存在,将导致未定义的行为。