我对C很新,但我不知道为什么我会收到此错误。我知道Segmentation Fault是因为超出了我的范围,但我不知道我在哪里。
#include <stdlib.h>
#include <stdio.h>
int** totalMatrix(int numRows, int numCols){
int** firstMatrix;
int** secondMatrix;
int** sumMatrix;
int row, col;
printf("Enter Matrix A\n");
firstMatrix = (int**)malloc(numRows * sizeof(int*));
for(row = 0; row < numRows; row++){
firstMatrix[row] = (int*)malloc(numCols * sizeof(int));
}
for(row = 0; row < numRows; row++){
for(col = 0; col < numCols; col++){
scanf("%d", &firstMatrix[row][col]);
}
}
printf("Enter Matrix B\n");
secondMatrix = (int**)malloc(numRows * sizeof(int*));
for(row = 0; row < numRows; row++){
secondMatrix[row] = (int*)malloc(numCols * sizeof(int));
}
for(row = 0; row < numRows; row++){
for(col = 0; col < numCols; col++){
scanf("%d", &secondMatrix[row][col]);
}
}
printf("A + B =\n");
sumMatrix = (int**)malloc(numRows * sizeof(int*));
for(row = 0; row < numRows; ++row){
for(col = 0; col < numCols; ++col){
sumMatrix[row][col] = firstMatrix[row][col] + secondMatrix[row][col];
printf("%d ", sumMatrix[row][col]);
}
printf("\n");
}
return 0;
}
void delete_matrix(int numRows, int** matrix){
int row;
for(row = 0 ; row < numRows; ++row){
free(matrix[row]);
}
free(matrix);
}
int main(){
int numRows, numCols;
int** matrix;
printf("Please Enter the number of rows: ");
scanf("%d", &numRows);
printf("Please Enter the number of cols: ");
scanf("%d", &numCols);
matrix = totalMatrix(numRows, numCols);
delete_matrix(numRows, matrix);
return 0;
}
提前致谢。
答案 0 :(得分:0)
对于firstMatrix
和secondMatrix
,您正确地malloc
外部维度,然后在循环中malloc
所有内部维度。
出于某种原因,对于sumMatrix
,您只有malloc
&#39}外部维度。它存储的所有指针都未初始化,但您已经&#39;重新引用它们。
请注意,当我说&#34;正确&#34;时,我会松散地使用这个术语:这是一个很多的不必要的动态分配!喜欢一个大的分配。您可以在单个内存块上映射2D索引。这也可以避免这个错误。
此外,您的函数始终返回0
。那是一个空指针。因此,当您在main
中使用它并将其传递给delete_matrix
时,这是毫无意义的。我完全摆脱了回报并将delete_matrix
调用移到了totalMatrix
的底部(argh!不一致的函数命名!)看到你确实需要这样做 three < / em>次 - 每个矩阵一次。