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时也会出问题。
展开
 我来答
宝平2
2012-11-03 · 超过46用户采纳过TA的回答
知道小有建树答主
回答量:199
采纳率:0%
帮助的人:103万
展开全部
int newINT = new int[0];
newINT[0]=0;
这样可以赋值
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
mirro187_
2012-11-04 · 超过11用户采纳过TA的回答
知道答主
回答量:76
采纳率:0%
帮助的人:72.6万
展开全部
你越界了可不是吗
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式