0

我有一个float**包含num_rows行和num_cols列的数组。我想确定 0-9 列之间每个数字的出现次数。为此,我想到了使用另一个 size 的二维数组[10][num_cols],这样对于每一列,对应于一个元素的数字就是原始表中该数字的出现次数。示例:如果原始表包含1 2 3 1 1在第五列中,那么在第二列中,值应类似于:1-> 3, 2 -> 1, 3 -> 1.

我尝试按如下方式使用该函数,但它给了我一个指针错误。我尝试使用向量,但这也没有带来任何运气。

int ** attribute_count(float * * input, int row_num, int col_num) {
    int ** arr_2 = new int * [10];
    int * arr = new int[10 * col_num];
    int counter = 0;

    for (int i = 0; i < 9; i++) {
        for (int j = 0; j < col_num; j++) {
            arr_2[i][j] = 0;
        }
    }

    for (int i = 0; i < 9; i++) {
        for (int j = 0; j < col_num; j++) {
            int temp = input[i][j];
            arr_2[temp][j]++;
        }
    }
    return arr_2;
}

编辑:我试过你的建议。新代码是:

    int** attribute_count(float** input, int row_num, int col_num) {
    int** arr_2 = new int* [10];
    int* arr = new int[10 * col_num];
    int counter = 0;

    for (int i = 0; i < 11; i++) {
        for (int j = 0; j < col_num; j++) {
            arr_2[i] = new int[col_num];
        }
    }

    for (int i = 0; i < 11; i++) {
        for (int j = 0; j < col_num; j++) {
            int temp = input[i][j];
            arr_2[temp][j]++;
        }
    }
    return arr_2;
}

这仍然给我记忆错误。该函数在 .cpp 中被调用,如下所示:

int** attr = attribute_count(training_data, 10, num_cols_train);
    cout<<attr[5][1];

知道我现在做错了什么吗?

4

3 回答 3

1

arr_2 被定义并分配为指向 int 的指针数组,但您实际上并没有分配/分配这些指针。

这是纠正代码的尝试-但是我不相信您有正确的行和列...

int ** attribute_count(float ** input, int row_num, int col_num)
{
int ** arr_2 = new int * [10];

    for (int i = 0; i < 10; i++)
    {
        arr_2[i] = new int[col_num];
        for(int j = 0 ; j < col_num ; j++)
        {
            arr_2[i][j] = 0;
        }
    }

    for (int i = 0; i < row_num; i++)
    {
        for (int j = 0; j < col_num; j++)
        {
            int temp = input[i][j];
            arr_2[temp][j]++;
        }
    }
    return arr_2;
}
于 2012-12-05T17:30:50.583 回答
1

您只分配了arr_2. 您需要循环并在每个整数上分配一个整数数组以获得第二维。

编辑:另外,怎么了arr?你分配它,从不使用它,不要归还它,也不要释放它。这就是我们拼写内存泄漏的方式。

于 2012-12-05T17:32:34.883 回答
1

I think your problem is in incorrect allocation of the 2D array. Try

int ** arr_2 = new int* [row_num];
for (int i = 0; i < row_num; i++)
    arr_2[i] = new int[col_num];
于 2012-12-05T17:33:15.913 回答