当我离开阵列时,Netbeans不会给出seg错误

时间:2015-11-12 18:21:10

标签: c++ c netbeans

这是代码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错误。

1 个答案:

答案 0 :(得分:2)

访问您不拥有的内存(在两个代码示例中都执行)是undefined behavior。这意味着代码可以做任何想做的事情;包括,就像你的Netbeans代码一样,似乎正常工作。没有办法“禁用”它,因为它没有改变编程语言。