C语言中动态内存分配(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

这实际上是一个持续的问题。首先,想法是从一维数组中附加一个矩阵。现在我希望它是纯二维的。像第一次一样,我遇到了一些分割错误的问题,我不确定问题出在哪里,因为我不知道如何正确使用2D数组。程序因以下代码而崩溃。我一直在摆弄它,但不能使它正常工作

#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()
{
    //...
}