c-使用malloc()初始化函数中的二维数组



我遇到了一个问题。我需要写一个函数,用malloc()分配任何2D数组,但我迷路了,不知道可能出了什么问题。以下是我迄今为止写的内容:

void matrix_ini(int **arr, int SIZE_X, int SIZE_Y);
int main() {
        int **arr;
        matrix_ini(arr, 2, 3);
        return 0;
}
void matrix_ini(int **arr, int SIZE_X, int SIZE_Y) {
        srand(time(NULL));
        arr = malloc(SIZE_X * sizeof *arr);
        for (int i = 0; i < SIZE_X; i++) {
                arr[i] = malloc(SIZE_Y * sizeof arr);
        }   
        //initializing array with some numbers:
        for (int i = 0; i < SIZE_X; i++) {
                for (int j = 0; j < SIZE_Y; j++) {
                        arr[i][j] = rand()%10;
                }   
        }   
}

我到底做错了什么?请温柔一点,我刚开始学习。欢迎任何提示。

问题#1:

此:

arr = malloc(SIZE_X * sizeof(*arr));

相当于:

arr = malloc(SIZE_X * sizeof(int*));

这对你的目的来说是可以的。

但是这个:

arr[i] = malloc(SIZE_Y * sizeof(arr));

相当于:

arr[i] = malloc(SIZE_Y * sizeof(int**));

这是不符合您的目的

所以改成这个:

arr[i] = malloc(SIZE_Y * sizeof(int));

问题2:

如果你想让一个函数改变你调用它的变量的值,那么你必须用该变量的地址来调用它。否则,它只能局部地更改变量的值(即在函数的范围内)。这几乎迫使您更改函数matrix_init:的整个原型、实现和用法

void matrix_init(int*** arr, int SIZE_X, int SIZE_Y)
{
    int** temp_arr;
    temp_arr = malloc(SIZE_X * sizeof(int*));
    for (int i = 0; i < SIZE_X; i++)
    {
        temp_arr[i] = malloc(SIZE_Y * sizeof(int));
        for (int j = 0; j < SIZE_Y; j++)
        {
            temp_arr[i][j] = rand()%10;
        }
    }
    *arr = temp_arr;
}

然后,在函数main中,您应该调用matrix_init(&arr,2,3)

问题3:

您应该确保释放任何在运行时动态分配的内存,稍后在程序执行时释放这些内存。例如:

void matrix_free(int** arr, int SIZE_X)
{
    for (int i = 0; i < SIZE_X; i++)
    {
        free(arr[i]);
    }
    free(arr);
}

然后,在函数main中,您应该调用matrix_free(arr,2)

相关内容

  • 没有找到相关文章

最新更新