c++ - 取消引用已删除的指针总是会导致访问冲突?

标签 c++ visual-c++ memory pointers crash

我这里有一个非常简单的 C++ 代码:

char *s = new char[100];
strcpy(s, "HELLO");
delete [] s;
int n = strlen(s);

如果我通过按 F5(开始调试)从 Visual C++ 2008 运行此代码,这总是会导致崩溃(访问冲突。)但是,在 IDE 之外启动此可执行文件,或使用 IDE 的Ctrl+F5(不调试就开始)不会导致任何崩溃。有什么区别?

我也想知道是否可以稳定重现访问删除区域导致的访问冲突崩溃?这种崩溃在现实生活中是不是很少见?

最佳答案

通过已删除的指针访问内存是未定义的行为。您不能指望任何可靠/可重复的行为。

它很可能在一种情况下“有效”,因为字符串仍然“坐在那里”在现在可用的内存中 -= 但你不能依赖它。 VS 用调试值填充内存以帮助强制崩溃以帮助查找这些错误。

关于c++ - 取消引用已删除的指针总是会导致访问冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2896238/

相关文章:

c++ - 复制在指针数组中动态创建的指针

c++ - 检索函数调用图

c++ - 在 Irrlicht 中减慢粒子系统的速度

c++ - 错误 C2679 : binary '>>' : no operator found which takes a right-hand operand of type 'std::string' (or there is no acceptable conversion)

c++ - 窗函数

c++ - 错误 C2059 : syntax error : ']' , 我无法弄清楚为什么这会出现在 C++ 中

c++ - 将字符串转换为C++中的变体

c++ - 本地 CGEventRef 是否被视为指针?

java - 不确定为什么在声明数组时我在 Java/Android 中遇到段错误

.NET 字符串与流 - 内存配置文件和特征