linux内存未分配释放错误,使用未分配的内存而不会出错?

为什么行得通?

#include

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

using namespace std;

int main() {

float* tab = new float[3];

cout << tab[7] << endl;

tab[7] = 6.87;

cout << tab[7] << endl;

delete[] tab;

}

我在带有MS VS 2008的Win

XP上尝试了这两个程序,均已编译且没有错误,并且第一个程序运行无任何错误。第二个弹出一些错误窗口,但是我不记得它并且无法复制(此刻无法访问Windows)。

我还在具有g ++的Linux(Kubuntu 10.10,预编译的内核软件包版本2.6.35.23.25)上进行了尝试,并且可以编译并运行而没有任何错误。

为什么?是否应该出现诸如“错误地访问未分配的内存”之类的弹出窗口?

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值