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<<" "<<p;

最佳答案

  1. 在调用 delete p; 之后解引用 p 的行为未定义。不要那样做。这很容易。现在更难的一点是:在调用 delete 之后读取 p 的值(更不用说取消引用它)的行为也是未定义的!所以也不要那样做。 (非正式地将指针放回未初始化状态。)

  2. *p = &b; 是错字。您需要p = &b; 将指针p 分配b 的地址。如果您更正了该拼写错误,您可以自由读取 p 的值再次取消引用它。

关于c++ - 具有运行时分配的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50103619/

相关文章:

c++ - 无法从 QML 访问 C++ QObject 子类方法

c++ - STD Map clear() 奇怪的行为

c++ - Node 12 (v8) - 将不推荐使用的代码转换为 "maybe"版本

c++ - 在 Visual Studio 10 项目中一起使用/YC 和/MP

c++ - 使用 lldb 调试时,较高的行号未解析为断点

c++ - 为什么 std::ifstream 构造函数不采用 std::string?

c++ - 封装一个 "include"所以只暴露选定的类

java - Java 和 C++ 之间的进程间通信

c++ - 哪些文件替换了 strstrea.h 和 stdiostr.h?

c++ - 在 Windows 上读取性能数据计数器是否需要任何特殊的安全权限?