gpt4 book ai didi

c++ - 使用未分配的内存没有错误?

转载 作者:IT王子 更新时间:2023-10-29 00:16:29 25 4
gpt4 key购买 nike

为什么会这样?

#include <iostream>
using namespace std;

int main() {
float* tab[3];

int i = 0;
while(i < 3) {
tab[i] = new float[3-i];
i++;
}

cout << tab[2][7] << endl;
tab[2][7] = 6.87;
cout << tab[2][7] << endl;

i = 0;
while(i < 3)
delete[] tab[i];
}

而这个不是?

#include <iostream>
using namespace std;

int main() {
float* tab = new float[3];

cout << tab[7] << endl;
tab[7] = 6.87;
cout << tab[7] << endl;

delete[] tab;
}

我在 Win XP 和 MS VS 2008 上尝试了这两个程序,都编译没有错误,第一个运行没有任何错误。第二个弹出了一些错误窗口,但是我不记得了,也无法重现(目前无法访问 Windows)。

我也在 Linux(Kubuntu 10.10,预编译内核包版本 2.6.35.23.25)上使用 g++ 尝试了它们,并且编译和运行都没有任何错误。

为什么?不应该有任何类似“错误访问未分配内存”的弹出窗口吗?

我知道它应该(而且,幸运的是,确实)编译没有错误,但我认为它不应该在没有错误的情况下运行...以及为什么第二个示例在 Windows 而不是在 Linux 上出错?

最佳答案

使用未分配的内存会导致未定义的行为。即使在相同的系统和编译器上执行此操作,您也不会期望会发生什么,更不用说跨硬件和编译器的不同组合了。

该程序可能会立即崩溃,它可能运行了一段时间然后又失败了,它甚至可能看起来运行完美。

不过,访问不属于您的内存始终是一个编程错误。不要把正确操作的表象想成是“有时能行”,想成是“我真倒霉,我的bug没有很快出现”。

关于c++ - 使用未分配的内存没有错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4316736/

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