C语言中动态内存分配(2D数组)的分段错误
这实际上是一个持续的问题。首先,想法是从一维数组中附加一个矩阵。现在我希望它是纯二维的。像第一次一样,我遇到了一些分割错误的问题,我不确定问题出在哪里,因为我不知道如何正确使用2D数组。程序因以下代码而崩溃。我一直在摆弄它,但不能使它正常工作C语言中动态内存分配(2D数组)的分段错误,c,arrays,matrix,2d,allocation,C,Arrays,Matrix,2d,Allocation,这实际上是一个持续的问题。首先,想法是从一维数组中附加一个矩阵。现在我希望它是纯二维的。像第一次一样,我遇到了一些分割错误的问题,我不确定问题出在哪里,因为我不知道如何正确使用2D数组。程序因以下代码而崩溃。我一直在摆弄它,但不能使它正常工作 #include <stdio.h> #include <stdlib.h> #define ROWS 10 #define COLUMNS 10 void fillMatrix (int *matrix[ROWS][COLUMN
#include <stdio.h>
#include <stdlib.h>
#define ROWS 10
#define COLUMNS 10
void fillMatrix (int *matrix[ROWS][COLUMNS], int rows, int columns)
{
int i, j;
for(i = 0; i < rows; i++)
{
for(j= 0; j < columns; j++)
{
matrix[i][j] = (rand() % 10) + 1;
}
}
}
void printMatrix (int *matrix[ROWS][COLUMNS], int rows, int columns)
{
int i, j;
for(i = 0; i < rows; i++)
{
for(j= 0; j < columns; j++)
{
printf("%2d ", matrix[i][j]);
}
printf("\n\n");
}
}
void sumMatrix (int *matrix[ROWS][COLUMNS], int *matrixA[ROWS][COLUMNS], int *matrixB[ROWS][COLUMNS], int rows, int columns)
{
int i, j;
for(i = 0; i < rows; i++)
{
for(j= 0; j < columns; j++)
{
matrix[i][j] = *matrixA[i][j] + *matrixB[i][j];
}
}
}
int main()
{
int matrix[ROWS][COLUMNS], r, s, i;
srand((unsigned) time(NULL));
do{
printf("Rows and columns (min 1 1, max 10 10) ");
scanf("%d %d", &r, &s);
}while(r > ROWS || r < 1 || s > COLUMNS || s < 1);
int** matrixA;
matrixA=(int**)malloc(r*sizeof(int*));
for (i=0; i<r; i++)
matrixA[i]=(int*)malloc(s*sizeof(int));
printf("\nMatrix A:\n\n");
fillMatrix(matrixA, r, s);
printMatrix(matrixA, r, s);
int** matrixB;
matrixB=(int**)malloc(r*sizeof(int*));
for (i=0; i<r; i++)
matrixB[i]=(int*)malloc(s*sizeof(int));
printf("\nMatrix B:\n\n");
fillMatrix(matrixB, r, s);
printMatrix(matrixB, r, s);
int** matrixC;
matrixC=(int**)malloc(r*sizeof(int*));
for (i=0; i<r; i++)
matrixC[i]=(int*)malloc(s*sizeof(int));
printf("\nSummed up (Matrix C):\n\n");
sumMatrix(matrixC, matrixA, matrixB, r, s);
printMatrix(matrixC, r, s);
free(matrixA);
free(matrixB);
free(matrixC);
return 0;
}
#包括
#包括
#定义第10行
#定义第10列
无效填充矩阵(int*矩阵[行][列]、int行、int列)
{
int i,j;
对于(i=0;i行| | r<1 | | s>列| | s<1);
int**矩阵;
矩阵=(int**)malloc(r*sizeof(int*);
对于(i=0;i将time.h
添加到顶部,并将函数参数声明为指向指针的指针,它应该可以工作
现在您有一个三重指针(一个2d指针数组)。对于所有类似的参数,将其更改为int**matrix
同样,从函数中的矩阵运算中删除所有带前缀的星号:
matrix[i][j]=*matrixA[i][j]+*matrixB[i][j];
应该是
matrix[i][j]=matrixA[i][j]+matrixB[i][j];
我删除了括号,这样答案就不会太长,您可能应该在代码中保留它们
#包括
#包括
#包括
#定义第10行
#定义第10列
无效填充矩阵(整数**矩阵、整数行、整数列)
{
int i,j;
对于(i=0;i
此代码甚至不可编译。您使用的编译器版本是什么?请将您的代码缩减到出现问题的相关部分。应该是int matrix[行][列]
同样,对于matrixA
和matrixB
。int*
使它成为指向int
的2D数组指针。你说的“减少代码”是什么意思?我对整个事情都有问题。我甚至正确地声明了2D数组吗?我是C新手,我看不出有人会否决这个问题的原因。确实如此不过,为我编译。由于指针错误,它无法执行代码,但我无法真正找到它。@Lowerer这确实解决了一点问题,但由于我在alloc中错误声明了一些内容,它仍然崩溃。有什么想法吗?这正是@Lower所说的,我已经实现了它。不过,感谢您的输入,我理解错误现在在哪里。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define ROWS 10
#define COLUMNS 10
void fillMatrix (int **matrix, int rows, int columns)
{
int i, j;
for(i = 0; i < rows; i++)
for(j= 0; j < columns; j++)
matrix[i][j] = (rand() % 10) + 1;
}
void printMatrix (int **matrix, int rows, int columns)
{
int i, j;
for(i = 0; i < rows; i++)
{
for(j= 0; j < columns; j++)
printf("%2d ", matrix[i][j]);
printf("\n\n");
}
}
void sumMatrix (int **matrix, int **matrixA, int **matrixB, int rows, int columns)
{
int i, j;
for(i = 0; i < rows; i++)
for(j = 0; j < columns; j++)
matrix[i][j] = matrixA[i][j] + matrixB[i][j];
}
int main()
{
//...
}