2D ARRAY (MATRIX) - 分段错误(CORE DUMPED)

2D ARRAY (MATRIX) - Segmentation Fault (CORE DUMPED)

我创建了以下程序,它接受用户输入的 nxn 数组并打印它。我的代码具有三个功能,即二维数组的内存分配、用户数据输入和显示存储的数据。虽然 1x1 到 4x4 矩阵工作正常,但 5x5 及以上矩阵会导致

    Segmentation fault (core dumped)

为什么会这样?我究竟做错了什么 ? 以下是我的代码-

#include <stdio.h>
#include <stdlib.h>

int ** allocateMemory(int, int);
void createMatrix(int **, int, int);
void displayMatrix(int **, int, int);

int main()
{
  int sizeA, sizeB;

  printf("\nMatrix type(a x b): ");
  scanf("%d %d", &sizeA, &sizeB);
  printf("You entered: %d x %d\n", sizeA, sizeB);
  int ** arrayA;

  arrayA = allocateMemory(sizeA, sizeB);
  printf("\nMATRIX A\n");
  createMatrix(arrayA, sizeA, sizeB);
  displayMatrix(arrayA, sizeA, sizeB);

  getchar();
  free(arrayA);
  printf("\n");
  return 0;
}

/*-----------------------------------------*/
/* FUNCTION TO ALLOCATE MEMORY TO AN ARRAY */
/*-----------------------------------------*/

int ** allocateMemory(int r, int c)          //r - rows, c - columns
{
  int ** ptr;
  ptr = (int **) malloc(r*sizeof(int));
  for(int i = 0; i < r; i++){
    ptr[i] = (int *) malloc(c*sizeof(int));
  }
  return ptr;
}

/*-----------------------------*/
/* FUNCTION TO CREATE A MATRIX */
/*-----------------------------*/

void createMatrix(int ** array, int r, int c)
{
  printf("\nEnter matrix values: \n");
  for(int i = 0; i < r; i++){
    for(int j = 0; j < c; j++){
      scanf("%d", &array[i][j]);
    }
  }
  printf("Array Created.");
  printf("\n");
}

/*----------------------------*/
/* FUNCTION TO DISPLAY MATRIX */
/*----------------------------*/

void displayMatrix(int ** array, int r, int c)
{
  printf("\n");
  for(int i = 0; i < r; i++){
    for(int j = 0; j < c; j++){
      printf("%5d  ", *(*(array + i) + j));
    }
    printf("\n");
  }
}

allocateMemory() 你有

ptr = (int **) malloc(r*sizeof(int));

那一行是错误的,因为你想为一个指针数组分配内存,所以它应该是

ptr = malloc(r*sizeof(int *));

ptr = malloc(r*sizeof *ptr);

如果 sizeof(int) < sizeof(int *)(通常在 64 位平台上),您没有分配足够的内存来调用未定义的行为。 "Undefined" 意味着任何事情都可能发生,包括代码似乎 运行 完美无缺(至少对于 rc 在您的情况下的某些值)

题外话:

您可能想阅读有关 why you should not cast the result of malloc()

的内容