我正在使用这个函数来读取输入矩阵:
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/