c++ - 访问无限数组元素?

标签 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

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

最佳答案

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

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

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


最后几点:首先,如果您认为您需要一个动态数组,那么您的下一个想法应该是std::vector。 .

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

关于c++ - 访问无限数组元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39190591/

相关文章:

android - Firebase C++ Cloud Messaging 后台问题

c++ - gcc编译C++代码: undefined reference to `operator new[](unsigned long long)'

c++ - 抽象类和虚拟构造函数的替代方法

javascript - 如何将字典附加到数组或字典键?

c - 使用malloc()和realloc()的函数的奇怪行为导致段错误

c++ - 通过使用分隔符 C++ 拆分文本来制作二维数组

JAVA - 对象无法添加到对象数组 - NullPointerException

arrays - MIPS:将用户输入字符串与内存中的字符串数组进行比较

pointers - Pointer Arithmetic on pointers to pointers 等

C - dir 路径最后一个文件夹 - 最后是乱码