我有点怀疑。
我有一个矩阵,我知道它将有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*
,因此强制转换返回malloc
到int*
的值将不起作用。(当然,如果你使用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);
}
希望你现在不会出错。