我遇到了某个地方发生的奇怪的分段错误,我想知道是否可能是因为我分配了指针矩阵数组的方式。
它在.h文件中声明为:
int **matrix;
但是当我通过它时,我以这种方式使用int * matrix [],以便 使用matrix [i]访问各行(这使我的许多任务变得更简单)。
所以,当我分配矩阵时,我应该完成:
matrix = new int * [vertices];
for (int i = 0; i < vertices; i++)
matrix[i] = new int[vertices];
或者对于第三行,我应该使用 - &gt;操作者:
matrix[i]-> new int[vertices]; // Or something like this.
这两者有什么区别?
答案 0 :(得分:0)
在这种情况下,您建议的第一个选项完全没问题。但是使用->
运算符的第二个甚至不是有效的语法。第一个建议的第一行实际上创建了一个int*
大小顶点的数组:
matrix = new int * [vertices];
此数组的每个元素都使用一些垃圾值进行初始化。你可以使用这样的大括号确保它初始化为零:new int * [vertices]()
。但无论如何,通过matrix[i]->
访问任何指针都是没有意义的。事实上,箭头操作符->
是一个解除引用操作符,专门用于指向具有成员的对象的指针。希望有所帮助。