C++ 循环中malloc之后释放内存

C++ 循环中malloc之后释放内存,c++,malloc,free,C++,Malloc,Free,我在一个循环中分配了一些内存-当我使用tr_数据变量时,如何释放它? 我对C相当陌生++ #define Malloc(type,n) (type *)malloc((n)*sizeof(type)) struct svm_problem tr_data; tr_data.l = (int) prm_num_samples_anchored.array[bar]; tr_data.y = Malloc(double, tr_data.l); tr_da

我在一个循环中分配了一些内存-当我使用tr_数据变量时,如何释放它? 我对C相当陌生++

    #define Malloc(type,n) (type *)malloc((n)*sizeof(type))

    struct svm_problem tr_data;
    tr_data.l = (int) prm_num_samples_anchored.array[bar];

    tr_data.y = Malloc(double, tr_data.l);
    tr_data.x = Malloc(struct svm_node*, tr_data.l);



    for (int row = 0; row < tr_data.l; row++)
    {
        tr_data.y[row] = ta0.array[bar-row-1];

        //leak
        svm_node* tr_data_x_onerow = Malloc(svm_node, num_features+1);  

        tr_data_x_onerow[0].index = 1; tr_data_x_onerow[0].value = in0.array[bar-row-1];    tr_data_x_onerow[1].index = 2; tr_data_x_onerow[1].value = in1.array[bar-row-1];    tr_data_x_onerow[2].index = 3; tr_data_x_onerow[2].value = in2.array[bar-row-1];    tr_data_x_onerow[3].index = 4; tr_data_x_onerow[3].value = in3.array[bar-row-1];    tr_data_x_onerow[4].index = 5; tr_data_x_onerow[4].value = in4.array[bar-row-1];    tr_data_x_onerow[5].index = 6; tr_data_x_onerow[5].value = in5.array[bar-row-1];    tr_data_x_onerow[6].index = 7; tr_data_x_onerow[6].value = in6.array[bar-row-1];    tr_data_x_onerow[7].index = 8; tr_data_x_onerow[7].value = in7.array[bar-row-1];    tr_data_x_onerow[8].index = 9; tr_data_x_onerow[8].value = in8.array[bar-row-1];    tr_data_x_onerow[9].index = 10;

        tr_data_x_onerow[num_features].index = -1;      //Each row of properties should be terminated with a -1 according to the readme

        tr_data.x[row] = tr_data_x_onerow;

    }
。。。对tr_数据的操作很少 ... 这是行不通的

    for (int row = 0; row <tr_data.l; row++)
    {
        free(tr_data_x_onerow);
    }

但请不要这样做。这是C++。使用向量或其他一些合理的集合。

您可能需要释放tru data.x[row];在第二个循环中,因为SvMyNojd*TrdDATAXXONEROW只在第一个循环内可用。作为旁瓣,C++中不应该使用MalOC/FLASH,更喜欢共享指针或其他新的/delete@Zermingorenew/delete只是逐渐变得更好,它应该是new[]/delete[]。在C++中,你不应该动态地分配数组,而且不需要它。只要使用std::vector@Jens我完全同意刚才代码示例的第一行me@Zermingore是的,从16年前的C99开始,甚至C都有内联函数。C程序员似乎是地球上最抵制改变的人……如果可以的话,我会的——我使用的库使用这种数据格式。你可以使用相同的数据格式,而不需要调用malloc。例如,您可以使用C++类来使用SeAN容器来保存数据,但仍然用指针指向容器创建相同的结构。除非图书馆可以呼叫免费或realloc。那你就完蛋了。
for (int row = 0; row <tr_data.l; row++)
{
    free(tr_data.x[row]);
}