分配指针数组

Allocating an array of pointers

本文关键字:数组 指针 分配      更新时间:2023-10-16

我遇到了一个奇怪的分割错误,该错误正在某处发生,我想知道这是否可能是由于我分配指针矩阵数组的方式。

它在 .h 文件中声明如下:

int **matrix;

但是当我传递它时,我以这种方式使用它 int *matrix[],以便使用 matrix[i] 访问单个行(这使我的许多任务更简单(。

因此,当我分配矩阵时,我应该这样做:

matrix = new int * [vertices];
    for (int i = 0; i < vertices; i++)
         matrix[i] = new int[vertices];

或者对于第三行,我应该使用 -> 运算符:

   matrix[i]-> new int[vertices];  // Or something like this.

两者之间有什么区别?

在这种情况下,您建议的第一个选项完全没问题。但是第二个带有 -> 运算符的语法甚至不是有效的语法。第一个建议的第一行实际上创建了一个大小顶点int*数组:

matrix = new int * [vertices];

此数组的每个元素都使用一些垃圾值进行初始化。您可以使用如下大括号确保它初始化为零:new int * [vertices]() .但无论哪种情况,通过matrix[i]->访问任何指针都是毫无意义的。实际上,箭头运算符 -> 是一个取消引用运算符,专门用于指向具有成员的对象的指针。希望有帮助。