访问无限数组元素?

时间:2016-08-28 11:02:45

标签: c++ arrays pointers

我试着理解指针。问题是:在编译第二个for循环时,我不应该遇到分段错误吗?如果不是为什么不呢?我无法阻止任何访问y [0] [dim]之外的元素。

int main(){                                                                                                   
        int dim = 3;                                                                                          
        int ordnung = 2;                                                                                      
        double** y = new double*[ordnung];                                                                    

        for(int i = 0; i<ordnung; i++){                                                                       
                y[i] = new double[dim];                                                                       
        }                                                                                                     

        for(int i = 0; i<=100; i++){                                                                          
                cout << y[0][i] << endl;                                                                      
        }                                                                                                     

        delete[] y;                                                                                           
        return 0;                                                                                             
}   

输出也令我困惑:

0
0
0
1.63042e-332
0
0
0
6.520933e-319

并且正在进行零。这是什么意思?

1 个答案:

答案 0 :(得分:1)

使用new[]分配内存时,它不会以任何特定方式初始化内存。它的内容是不确定并且访问它,即使是阅读,也会导致未定义的行为

您也会超出分配的内存范围,这也会导致未定义的行为。 C ++没有内置的边界检查。

然后你不会释放你分配的所有内存。对于每个new,应该匹配delete,并且对于每个new[]匹配delete[]

最后一些注意事项:首先,如果您认为自己需要动态数组,那么您的下一个想法应该是std::vector

关于使用newnew[]时未初始化的内存,当然这取决于您分配的 。如果使用构造函数分配对象(或对象数组),那么当然会导致调用构造函数。构造函数可能或可能,初始化对象。