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

标签 c arrays function malloc 2d

我遇到了问题。 我需要编写一个函数,它将使用 malloc() 分配任何二维数组,但我迷失了,不知道可能出了什么问题。 这是我到目前为止所写的内容:

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的整个原型(prototype)、实现和使用:

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)

关于c - 使用 malloc() 在函数中初始化二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23278590/

相关文章:

python - 将函数应用于多个列表 (Python)

c# - 我们可以使用 "goto"关键字来结束线程吗?

c - 如何评估我的输入参数是否将所有偶数位都设置为 1?

c - C 程序中从指针运行函数

javascript - Laravel 根据请求接收数组

arrays - Swift 追加到二维数组

c - 如何从 C 中头文件中的函数返回多维字符数组

C程序-输出中的特殊字符

perl - 如何在 perl 中调用在文字字符串中定义的函数名称?

python - 我需要 fillcolor 来读取 Python 中的值