【发布时间】:2015-08-29 15:26:09
【问题描述】:
我正在学习 C++ 中的动态内存。我的问题是为什么在以下代码中删除变量后我没有收到错误?
float* uf = new float(4.26);
delete uf;
cout << uf << '\n';
cout << *uf << '\n';
【问题讨论】:
-
因为它是未定义的行为,而 UB 有时看起来工作得很好,但实际上并非如此。
-
删除后取消引用指针会触发未定义的行为。未定义的行为可能会被忽视、触发分段错误或产生奇怪的输出......这就是程序员花这么多时间调试代码的原因!
-
是的,我得到的不是 4.26,而是一个奇怪的数字,就像我做的一样 "float a; cout
-
这个奇怪的数字来自进程专用的内存空间中的某个内存块。 Omho 在这种情况下,最好的结果是您的应用程序崩溃(由于分段错误),否则您可能会完全错过它,例如,当应用程序编译正常时,您可能会花费数小时试图弄清楚为什么会得到这个和那个结果算法方面你看不到任何问题。处理指针时的一种常见做法是在释放指针变量指向的内存后立即将其设置为 NULL,从而使指针变量无效。
-
顺便说一句,我不明白为什么这个问题被否决了。这是一个合法的问题,除了它的表述方式(我已经编辑了一点)之外它很好。
标签: c++ pointers memory dynamic allocation