-1

我有一个疑问。

我有一个矩阵,我知道它将有 3 列,但行数将在存储矩阵的类的构造函数中定义。然后我将变量声明为

int * ColorsYUV[3];

但是当我尝试使用 malloc 分配它时:

ColorsYUV = (int *) malloc(sizeof(T) * 8 * sizeof(int) * 3);

我收到此错误:

incompatible types in assignment of ‘int*’ to ‘int* [3]’

我该如何解决这个问题。我意识到的唯一想法是使用一个简单的向量并访问它,添加一个从 0 到 2 的“for”循环,但是,如果可能的话,我更喜欢像矩阵这样的访问。

ColorsYUV[i][0]...
ColorsYUV[i][1]...
ColorsYUV[i][2]...

我希望我解释了我自己......提前谢谢。

4

3 回答 3

2

首先,正如 ogni42 所说,你真的应该使用 std::vector<std::array<int, 3>>; 如果您没有 C++11,请使用boost::array而不是std::array. 否则,如果您真的使用 C 而不是 C++:

int* ColorsYUV[3];

声明一个由三个指针组成的数组。你想要的是:

int (*ColorsYUV)[3];

这是一个指向三个数组的指针。

然后,我不明白你的 malloc:它在哪里sizeof(T) :如果你想分配一个 8 x 3 矩阵:

ColorsYUV = (int (*)[3])malloc( 8 * 3 * sizeof(int) );

请注意,您必须在强制转换中复制指针的类型;ColorsYUV不是,所以将返回值转换为to是行不通的。(当然,如果你使用 C,你可以像其他人一样做,完全放弃强制转换。C 允许隐式转换 为任何对象指针类型。)int*mallocint*void*

于 2013-07-30T10:26:03.343 回答
0

首先:如果是 C++,请考虑使用std::vector<array<int, 3>>. 您将免费获得阵列访问[][]和内存管理。

如果您想在保持 C 风格的同时解决问题,则需要将演员表修复为正确的类型

于 2013-07-30T10:17:38.027 回答
0

首先声明指针数组(列)

 int (*ColorsYUV)[3];

然后使用'for'循环分配内存。它被用作一个指针一次可以指向一个内存地址,而不是整个数组。假设行数= 8,所以

  int no_of_rows = 8; //value set as an example
  for (i=0;i<3;i++)
  {
     ColorsYUV[i] = (int *) malloc(sizeof(int) * no_of_rows);
  }

希望你现在不会出错。

于 2013-07-30T10:53:08.240 回答