gpt4 book ai didi

c++ - 删除堆然后取消引用指向该内存的指针

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:55:54 26 4
gpt4 key购买 nike

这是练习中的代码:

#include <iostream>
using namespace std;

int main() {
int n = 13;
int* ip = new int(n + 3);
int* ip2 = ip;
cout << *ip << endl;
delete ip;
cout << *ip2 << endl;
cout << ip << tab << ip2 << endl;
}

当分配给堆上 int 的空间被删除时,我认为取消引用指针会导致某种内存错误。相反,它返回 0。

这是为什么?

最佳答案

根据规范取消引用无效指针会导致未定义的结果。它不能保证会失败。

通常(CPU/OS/编译器/...依赖),编译器根本不关心它。它只是给出该内存地址当前的内容。例如,在 x86 架构中,只有本地址位于未映射到您的进程的内存页中(或者您的进程没有访问该内存页的权限)时,您才会看到错误,因此 CPU 将抛出异常(保护错误)操作系统将适当处理(并且可能使您的进程失败)。有时会使用一个技巧来使访问地址 0 总是导致访问冲突:操作系统将页表中地址空间第一页的读/写位设置为 0,以便任何访问该页面将始终生成异常。

关于c++ - 删除堆然后取消引用指向该内存的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/927945/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com