gpt4 book ai didi

c - 我的代码出现段错误

转载 作者:行者123 更新时间:2023-11-30 21:28:50 24 4
gpt4 key购买 nike

我对 C 很陌生,但我不知道为什么会收到此错误。我知道段错误是由于超出了我的范围,但我不知道我在哪里。

This is my code

#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;
}

It works but crashes

提前致谢。

最佳答案

对于firstMatrixsecondMatrix,您正确malloc外部维度,然后在循环中malloc所有内部尺寸。

出于某种原因,对于 sumMatrix,您仅 malloc 了外部维度。它存储的所有指针都未初始化,但您取消引用它们。

请注意,当我说“正确”时,我使用的术语很宽松:这是很多不必要的动态分配!更喜欢一大笔分配。您可以将 2D 索引映射到单个内存块上。这也可以避免这个错误。

此外,您的函数始终返回0。那是一个空指针。因此,当您在 main 中使用它并将其传递给 delete_matrix 时,这是没有意义的。我会完全摆脱 return 并将 delete_matrix 调用移动到 totalMatrix 的底部(啊!函数命名不一致!)看到你实际上需要这样做< em>三次 - 每个矩阵一次。

关于c - 我的代码出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37264705/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com