访问无限数组元素

Access to infinite array elements?

本文关键字:数组元素 无限 访问      更新时间:2023-10-16

我试着理解指针。问题是:在编译第二个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

和持续的零。这是什么意思?

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

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

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


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

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