C/C++ new delete 。有个奇怪的问题。 编译环境vs2010
int_tmain(intargc,_TCHAR*argv[]){int*newINT=newint[2];//如果我强制给未定义的*(newINT+2)赋值,按下F5的...
int _tmain(int argc, _TCHAR* argv[])
{
int *newINT = new int[2];
//如果我强制给未定义的*(newINT+2)赋值,按下F5的时候界面一直停在哪儿不主动退出(属于异常但不报错)
*(newINT+2) = 5;
//如果我强制给未定义的*(newINT+3)赋值,按下F5的时候,报错!
// *(newINT+3) = 5;
delete [] newINT;//整个程序如果注释掉delete语句编译器无异常不报错
return 0;
}
-----------------------------------------------------------------------------------------------------------------
亲们,我在此声明我知道指针和不能越界等等的重要性。在这里我只是想探究产生这种现象的深沉次原因。
-----------------------------------------------------------------------------------------------------------------
最先我是好奇int newINT = new int[0]时会发生什么事。最后在C++ Primer上找到
“用 new 动态创建长度为 0 的数组时,new 返回有效的非零指针。该指针与 new 返回的其他指针不同,不能进行解引用操作,因为它毕竟没有指向任何元素。而允许的操作包括:比较运算,因此该指针能在循环中使用;在该指针上加(减)0;或者减去本身,得 0 值。”
但是我在调试过程中发现当执行*newINT = 5;时。delete时就出现异常了。
在网上也查到过ch = (char*)malloc(0);如果此时*ch = ‘a’的话在free时也会出问题。 展开
{
int *newINT = new int[2];
//如果我强制给未定义的*(newINT+2)赋值,按下F5的时候界面一直停在哪儿不主动退出(属于异常但不报错)
*(newINT+2) = 5;
//如果我强制给未定义的*(newINT+3)赋值,按下F5的时候,报错!
// *(newINT+3) = 5;
delete [] newINT;//整个程序如果注释掉delete语句编译器无异常不报错
return 0;
}
-----------------------------------------------------------------------------------------------------------------
亲们,我在此声明我知道指针和不能越界等等的重要性。在这里我只是想探究产生这种现象的深沉次原因。
-----------------------------------------------------------------------------------------------------------------
最先我是好奇int newINT = new int[0]时会发生什么事。最后在C++ Primer上找到
“用 new 动态创建长度为 0 的数组时,new 返回有效的非零指针。该指针与 new 返回的其他指针不同,不能进行解引用操作,因为它毕竟没有指向任何元素。而允许的操作包括:比较运算,因此该指针能在循环中使用;在该指针上加(减)0;或者减去本身,得 0 值。”
但是我在调试过程中发现当执行*newINT = 5;时。delete时就出现异常了。
在网上也查到过ch = (char*)malloc(0);如果此时*ch = ‘a’的话在free时也会出问题。 展开
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询