pla*_*fer 3 c++ dynamic-memory-allocation
我正在使用http://www.learncpp.com上的教程学习c ++ .在使用new和delete(http://www.learncpp.com/cpp-tutorial/69-dynamic-memory-allocation-with-new-and-delete/)的动态内存分配课程中,它指出:
类似地,当删除动态分配的变量时,指向它的指针不为零.请考虑以下代码段:
int *pnValue = new int;
delete pnValue; // pnValue not set to 0
if (pnValue)
*pnValue = 5; // will cause a crash
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试它(编译器:GNU GCC编译器,ubuntu)时,我的程序不会崩溃.
int *pnValue = new int;
delete pnValue; // pnValue not set to 0
if (pnValue)
*pnValue = 5; // will cause a crash -> doesn't
std::cout << "Did not crash" << std::endl;
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?在C++中是否有任何形式的运行时检查?
你的程序没有崩溃,因为你很幸运(或者不幸,感谢@ user1320881,因为你可能没有在更复杂的代码中检测到这些东西,并且可能会发生一些后来的崩溃或令人讨厌的副作用).事实上,你在这里所拥有的是未定义的行为,任何事情都可能发生(不一定是崩溃).从技术上讲,你的程序可能不会崩溃,因为操作系统还没有回收那部分内存而你没有覆盖属于其他进程的内存,但是你不应该编写这样的代码.
| 归档时间: |
|
| 查看次数: |
160 次 |
| 最近记录: |