【问题标题】:Allocating an array of pointers分配指针数组
【发布时间】:2014-08-19 00:53:24
【问题描述】:

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

在 .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.

这两者有什么区别?

【问题讨论】:

  • 你能发布更多代码,比如接收矩阵参数的函数吗?并且可能会发布一个小的可编译示例。
  • 一个编译,另一个不编译?
  • 文件很大,这只是其中的一部分,我担心可能会导致错误。 @0x499602D2 好吧,是的,因此旁边的评论...
  • 我认为您正在寻找运算符*,而不是后一个示例中的-&gt;
  • 我会以不同的方式处理工作任务。 stackoverflow.com/a/6465254/179910

标签: c++ arrays pointers matrix


【解决方案1】:

在这种情况下,您建议的第一个选项完全可以。但是带有-&gt; 运算符的第二个甚至不是有效的语法。第一个建议的第一行实际上创建了一个大小为 verticesint* 数组:

matrix = new int * [vertices];

这个数组的每个元素都用一些垃圾值初始化。您可以使用这样的大括号确保它被初始化为零:new int * [vertices]()。但无论哪种情况,通过matrix[i]-&gt; 访问任何指针都是没有意义的。事实上,箭头运算符-&gt; 是一个解引用运算符,专门用于指向具有成员的对象的指针。希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 2010-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多