这是代码1
int j[2];
int *ptr = j;
for(int i=0;i<__INT_MAX__;++i){
cout << i << endl;
j[i]=0;
}
在此代码中,它打印1 2 3 4 5 6 7并再次打印1 2 3 4 5 6 7.它不会给出分段错误。但是当我将数组的地址分配给指针并写入ptr [i]而不是j [i]时,它会打印1 2 3 4 5 6并且它会给出分段错误。那段代码:
int j[2];
int *ptr = j;
for(int i=0;i<__INT_MAX__;++i){
cout << i << endl;
ptr[i]=0;
}
所以我认为Netbeans处理这种情况,但这对程序员有害。我该如何禁用它?还有其他类似的“保护措施”吗?
摘要编辑:它必须给我分段错误,但事实并非如此。我想要出错,所以我将能够修复我的代码。 Netbeans可以防止这种错误。
编辑2:此主题不重复。在那个主题中,他只尝试了一个地址。在我的代码中,有无限循环,它必须给出seg错误
添加3:当我从堆中分配时,给出地址并放入循环的指针,i值接近30.000。但是在第一个代码中,它会增加到6-7,再次从0开始。因此,我认为我的IDE可以防止seg错误。
答案 0 :(得分:2)
访问您不拥有的内存(在两个代码示例中都执行)是undefined behavior。这意味着代码可以做任何想做的事情;包括,就像你的Netbeans代码一样,似乎正常工作。没有办法“禁用”它,因为它没有改变编程语言。