C++ 如何操作包含二维数组的结构数组

C++ 如何操作包含二维数组的结构数组,c++,arrays,c++11,C++,Arrays,C++11,使用C++,我正在实现一个结构为HiddenLayer的数组,定义为 struct HiddenLayer { int prev; ///Number of Rows in node int next; ///Number of Columns in node float **node; ///2D array pointer }; 结构数组在主例程中初始化,节点是指向结构内部2D数组的指针。我正在将此数

使用C++,我正在实现一个结构为HiddenLayer的数组,定义为

    struct HiddenLayer
    {
        int prev;     ///Number of Rows in node
        int next;     ///Number of Columns in node

        float **node; ///2D array pointer
    };
结构数组在主例程中初始化,节点是指向结构内部2D数组的指针。我正在将此数组初始化为

    int main()
    {
        struct HiddenLayer HLayer[1]; 

        HLayer[0].prev = 1;  //Num of rows
        HLayer[0].next = 3;  //num of col

        HLayer[0].node = (float *) malloc((HLayer[0].prev) * sizeof(float *));  
 
        for(int i=0;i<HLayer[0].prev;i++)
            HLayer[0].node[i] = malloc(HLayer[0].next * sizeof(float));

    
        return 0;
    }
我跟着给出的答案走了


我做错了什么?

错误消息是不言自明的:您混淆了类型

HLayer[0].node = (float *) malloc((HLayer[0].prev) * sizeof(float *));
应该是

HLayer[0].node = (float **) malloc((HLayer[0].prev) * sizeof(float *));
HLayer[0].node[i] = (float *) malloc(HLayer[0].next * sizeof(float));

应该是

HLayer[0].node = (float **) malloc((HLayer[0].prev) * sizeof(float *));
HLayer[0].node[i] = (float *) malloc(HLayer[0].next * sizeof(float));

但是,为什么你想在C++中使用<代码> MalCube()/代码>和家庭?错误信息是不言自明的:你把类型混淆了。

HLayer[0].node = (float *) malloc((HLayer[0].prev) * sizeof(float *));
应该是

HLayer[0].node = (float **) malloc((HLayer[0].prev) * sizeof(float *));
HLayer[0].node[i] = (float *) malloc(HLayer[0].next * sizeof(float));

应该是

HLayer[0].node = (float **) malloc((HLayer[0].prev) * sizeof(float *));
HLayer[0].node[i] = (float *) malloc(HLayer[0].next * sizeof(float));

<>但是,为什么你想在C++中使用<代码> MalCube()/Cub和Stand?< /P>,所以这不是,对吗?<代码>(浮点*)Malc C <代码>应该至少是<代码>(浮点**)Malc < /Cube > 1。您正试图将
float*
影响为
float**
。2.您没有转换到正确的类型…而您的另一个
malloc
应该转换到
(float*)
-simples!很抱歉被malloc的使用抛弃了。所以这不是,对吧?
(float*)malloc
至少应该是
(float**)malloc
1。您正试图将
float*
影响为
float**
。2.您没有转换到正确的类型…而您的另一个
malloc
应该转换到
(float*)
-simples!很抱歉被malloc的使用抛弃了。对C++来说这是真的吗?为什么不把
new
改为
malloc
@TruthSeeker(1)第(2)行呢?这和我答案中的最后一行是一样的。@SouravGhosh,谢谢!我必须避免像新的和STL容器那样的C++特性。但是我应该如何添加和操作数据到这个数组?@SouravGhosh@PeDro不使用<代码>新< /COD>或标准库,不能在C++中可靠地使用动态内存分配。code>mallocwithout
new
在技术上总是会导致未定义的行为,如果所使用的类型不是琐碎的,则可以肯定。对使用<代码>新< /COD>有限制,但允许 MalOC<<代码>,在C++中没有意义。对C++来说这是真的吗?为什么不把
new
改为
malloc
@TruthSeeker(1)第(2)行呢?这和我答案中的最后一行是一样的。@SouravGhosh,谢谢!我必须避免像新的和STL容器那样的C++特性。但是我应该如何添加和操作数据到这个数组?@SouravGhosh@PeDro不使用<代码>新< /COD>或标准库,不能在C++中可靠地使用动态内存分配。code>mallocwithout
new
在技术上总是会导致未定义的行为,如果所使用的类型不是琐碎的,则可以肯定。对使用<代码>新< /COD>有限制,但允许 MalOC<<代码>,在C++中没有意义。