Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;分配只有COL已知行和未知行的矩阵时出现问题_C++_C_Vector_Matrix_Malloc - Fatal编程技术网

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

C++ C++;分配只有COL已知行和未知行的矩阵时出现问题,c++,c,vector,matrix,malloc,C++,C,Vector,Matrix,Malloc,我有点怀疑 我有一个矩阵,我知道它有3列,但行数将在存储矩阵的类的构造函数中定义。然后我将变量声明为 int * ColorsYUV[3]; 但当我尝试使用malloc分配它时: ColorsYUV = (int *) malloc(sizeof(T) * 8 * sizeof(int) * 3); 我得到这个错误: incompatible types in assignment of ‘int*’ to ‘int* [3]’ 我怎样才能解决那个问题。我实现的唯一想法是使用一个简单的向量

我有点怀疑

我有一个矩阵,我知道它有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]...
我希望我能解释我自己。。。
首先感谢:

首先:如果是C++,考虑使用<代码> STD::向量< /代码>。您将免费获得阵列访问权限和内存管理


如果您想在使用C-style的同时解决问题,您需要首先将强制转换修复为正确的类型,正如ogni42所说,您确实应该使用
std::vector
;如果没有C++11, 然后使用
boost::array
而不是
std::array
。否则,如果 您实际上使用的是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*
到任何对象指针类型。)

首先声明指针数组(列)

然后使用“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);
  }
int no_of_行=8//以值集为例

对于(i=0;i是C++还是c?因为它们是不同的,所以请调整你的标签。我使用C++,但是我认为指针在C++和C++中都是相等的。我是新手。我只有2周的C++。请不要太强硬。我想我克服了其他答案的麻烦,但是谢谢你们阅读我的问题的时间。@ Borddo91指针是P。在两种语言中,ReTy都是一样的,但是C++类解决方案不使用指针,C解决方案确实如此。(你写的基本上是C++,它永远不会用C++编写。)哦,我不知道。我认为最好是像C++那样分配C分配。再次感谢。我将检查我的整个代码,如果他坚持C,他将不得不修改<代码> CyryVuuu> /代码>。目前,它是一个数组(这意味着你不能分配它,也不向它投一个指针)。当然,这是一种东西,它显示了为什么我们应该切换到C++ + 1来在指针数组和指针数组之间划定三的数组!哦,SRRY我在类中使用了模板。T可以是int,浮点或双。谢谢你的回答,也谢谢OGNI42。我很高兴。现在我想我更了解POI了。入口
  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);
  }