Согласованная ошибка сегмента от назначения массива 2d кучи в C - PullRequest
0 голосов
/ 26 октября 2019

Я создаю двумерный массив, подобный этому

int** B = calloc(16, sizeof(int*));

for(int i = 0; i <= 16; i++){

B[i] = calloc(16, sizeof(int));

}

, затем я передаю B в функцию, которая вызывает параметр int **. Затем эта функция вызывает другую функцию, которая вызывает int **, так что B снова передается.

Я могу сделать это B[1][1]++;

, но когда я пытаюсь

B[1][0] = 1; 

, я получаю ошибку сегментации.

Я пробовал так много вещей, и ничто не помогло.

Редактировать: Решено!

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

1 Ответ

1 голос
/ 26 октября 2019

В цикле for вы имеете условие i <= 16, и вы выделили только 16 * размер типа int *. Следовательно, вы выходите за пределы выделенного вам пространства.

...