C - 如果矩阵大于 5x5,矩阵输入函数会出现运行时错误,但代码中没有定义大小

标签 c matrix malloc

我正在使用这个函数来读取输入矩阵:

void leMatInt(int **M,int linhas,int colunas){
    int i, j;
    for (i = 0; i < linhas; i++){
      for (j = 0; j < colunas; j++){
        scanf("%d", &M[i][j]);
        //printf("Leu [%d, %d]\n", i, j);
      }
    }
}

我正在创建这样的矩阵:

scanf("%d", &v1);
int **matriz1=(int **)malloc(v1 * sizeof(int));
for(i = 0;i < v1; i++){
    matriz1[i] = (int *)malloc(v1 * sizeof(int));
}
leMatInt(matriz1, v1, v1);

该代码适用于 v1 <= 4,但如果我尝试输入 5v5 矩阵,代码会在函数处出现运行时错误。

最佳答案

matriz1 是一个双指针,因此在分配内存时您应该编写 sizeof(int*)。因为 ** pointer 将持有/包含 * single 指针。

int **matriz1 = malloc(v1 * sizeof(int*));
for(i = 0;i < v1; i++){
    matriz1[i] = malloc(v1 * sizeof(int));
}

不鼓励对 malloc() 进行类型转换。

关于C - 如果矩阵大于 5x5,矩阵输入函数会出现运行时错误,但代码中没有定义大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47335837/

相关文章:

c - 使用iceast服务器开发网络广播监听客户端

c - 矩阵乘法 - C

c - 反转任意大小的矩阵

c - 将内存释放到C中的二维数组

c - 了解使用GCC编译器在ARM平台上优化C代码

c - 编写一个程序,读取一个文本文件的内容,并将字数、大写/小写字母和数字写入一个单独的文件

c - 从 C 语言中的 C 风格字符串获取位序列?

r - 使用R指定row.name来打开CSV文件时出错

Char** 字符串数组

c - 在用 malloc 创建的字符串中逐字符写入?