我这里有一个非常简单的 C++ 代码示例:
char *s = new char[100];
strcpy(s, "HELLO");
delete [] s;
int n = strlen(s);
如果我通过按 Visual C++ 2008 运行此代码F5(开始调试)这总是会导致崩溃(访问冲突)。但是,在 IDE 外部启动此可执行文件,或者使用 IDECtrl+F5(启动而不调试)不会导致任何崩溃。有什么区别?
我还想知道是否可以稳定地重现访问已删除区域导致的访问冲突崩溃?这种车祸在现实生活中很少见吗?
通过已删除的指针访问内存是未定义的行为。您不能期望任何可靠/可重复的行为。
最有可能的是它在一种情况下“有效”,因为字符串仍然“坐在那里”在现在可用的内存中 -= 但你不能依赖它。 VS 用调试值填充内存,以帮助强制崩溃,从而帮助找到这些错误。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)