Почему мой 2D-массив инициализируется случайным целочисленным значением с индексом 0 после использования calloc ()? - PullRequest
0 голосов
/ 04 мая 2018

В школе мне нужно сделать задание, в котором я использую двумерный массив. В качестве входных данных указывается целевое значение, которое определяет количество элементов в первом измерении массива. Второе измерение - это операция, которую мы выполняем над текущим элементом, и сколько это будет теоретически стоить нам.

По какой-то причине мое значение в [0] [0] в массиве меняется на случайное целочисленное значение после того, как я инициализирую его с помощью calloc () (который установит массив в 0).

Мы используем 2D-массив для хранения оптимальной математической операции, которую необходимо выполнить, чтобы достичь нашей цели, вместе с теоретической стоимостью этой операции.

typedef struct GoalArray {
  int **path;    /* 2D-Array of operations and cost for each element */
} GoalArray;


  GoalArray makeGoalArray(int goal) {
  /* Returns an empty 2-Dimenional GoalArray.
   * Due to there being 6 limited mathematical operations, our maximal 
   * needed index in the array is: (3 * the goal value) + 1.
   */

  printf("Goal : %d", goal);

  GoalArray ga;
  ga.path = calloc((goal * 3) + 1, sizeof(int));
  assert(ga.path != NULL);

  for (int i = 0; i < (goal * 3) + 1; i++){
    ga.path[i] = calloc(2, sizeof(int));
    assert(ga.path[i] != NULL);
    printf("i = %d:  %d, %d\n", i, ga.path[i][0], ga.path[i][1]);
  }

  printf("\nTest %d, %d\n", ga.path[0][0], ga.path[0][1]);
  return ga;
}

С целью 2 он производит такой вывод:

Goal : 2
i = 0:  0, 0
i = 1:  0, 0
i = 2:  0, 0
i = 3:  0, 0
i = 4:  0, 0
i = 5:  0, 0
i = 6:  0, 0

Test 19244512, 0

Как это возможно, что в операторе print значение массива с индексом [0] [0] изменилось?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...