C++在分配只有列已知和未知行的矩阵时出现问题

C++ Troubles allocating matrix with only cols known and unknown rows

本文关键字:问题 未知 分配 C++      更新时间:2023-10-16

我有点怀疑。

我有一个矩阵,我知道它将有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]...

我希望我能解释我自己。。。提前谢谢。

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

int* ColorsYUV[3];

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

int (*ColorsYUV)[3];

其是指向三个数组的指针。

那么,我不明白你的malloc:sizeof(T)在哪里如果你想分配一个8乘3的矩阵:

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

请注意,您必须在铸造ColorsYUV而不是int*,因此强制转换返回mallocint*的值将不起作用。(当然,如果你使用C,你可以做其他人做的事情,并且完全放下石膏。C允许对void*到任何对象指针类型。)

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

如果你想在使用C风格的同时解决问题,你需要将转换修复为正确的类型

首先声明指针数组(列)

 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);
  }

希望你现在不会出错。