Я запускаю следующую программу на C и получаю Segmentation fault: 11
.Ошибка сегментации при печати содержимого многомерного массива
#include <stdio.h>
#include <stdlib.h>
#define SIZE 2
void print_array(double **arr, int size) {
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
printf("%f\n", arr[i][j]);
}
}
}
int main(int argc, char **argv) {
double mat[SIZE][SIZE] = {{1, 2}, {3, 4}};
print_array((double **) mat, SIZE);
}
Не могли бы вы объяснить, почему это может произойти? Я не считаю, что мне нужно динамически выделять память для mat
, так как я передаю ее в print_array
в пределахmain()
функция.
При изменении функции подписи print_array()
в
void print_array(int size, double arr[size][size])
проблема уходит.
Все еще интересно, но ... Почему возникает ошибка сегментации при литье mat
как double **
и передается в print_array()
? В конце дня double arr[2][2]
и double **arr
с размером 2 - это то же самое, правильно?
Теперь я понимаю, спасибо за ваш ответ. Я использую эту функцию для печати содержимого квадратных матриц, хранящихся в стеке, в функциях, а также для печати содержимого массивов, инициализированных как «double ** mat», используя вызовы malloc. Как я могу использовать одну и ту же функцию для обоих?Как я уже упоминал, изменение подписи функции печати для принятия 'arr [size] [size]', а также параметра размера сделало трюк, но я чувствую, что если бы попытался использовать эту новую функцию, для печати массивов, хранящихся как 'double **', так как они не сохраняют двойники смежно. –
Фактический тип 'arr', объявленный как' double arr [size] [size] 'и переданный функции' double [] [size] '. Функции ожидают 'double *'. Вы правильно назовете его: 'print_matrix_compact (& arr [0] [0], size);' –