Segmentation fault. Присвоение значений элементам структуры - C (СИ)
Формулировка задачи:
Компилируется как надо. На винде падает после запуска, на линуксе после запуска выдает sigmentation fault (Ошибка сегментирования. Сделан дамп памяти). Очевидно, что проблема в неверном присваивании значений элементам объекта типа Matrix. Но как правильно присвоить значения не могу понять. Прошу подсказать, в чем дело.
П.С. Знаю, что можно сделать без структур и в функции выделения дин.памяти обойтись без указателей, но наличие typedef struct, названия функций и передаваемые в них значения были в шаблоне задания.
#include <stdio.h> #include <stdlib.h> typedef struct Matrix { double **values; int col; int row; } Matrix; Matrix *matrix; Matrix *create_matrix(int row, int col) { Matrix *matrix; double **matrix_array = (double**)malloc(row*sizeof(double*)); int k; for(k = 0; k<=row; k++) { matrix_array[k] = (double *)malloc(col*sizeof(double)); } if(matrix_array ==NULL) { printf("Not enough memory!\n"); } matrix->row = row; matrix->col = col; //Видимо, вот в этих присваиваниях основная проблема. matrix->values = matrix_array; return matrix; } void *create_matrix_from_file(FILE* file) { int i, k, row, col; if(file == NULL) { printf("Can not open file"); } else { fseek(file , 0 , SEEK_END); long lSize = ftell(file); rewind (file); int buff[lSize]; for(i = 0; i<lSize; i++) { fscanf(file, "%i", &buff[i]); } row = buff[0]; col = buff[1]; printf("\n*************\n"); Matrix *matrix = create_matrix(row, col); // printf(" !!!row = %i\n", matrix->row); printf("!!!col = %i\n", matrix->col); k = 2; int j; for(i = 0; i< row; i++) { for(j = 0; j< col; j++) { matrix->values[i][j] = buff[k]; k++; printf("%.01lf ", matrix->values[i][j]); } printf("\n"); } } }
Решение задачи: «Segmentation fault. Присвоение значений элементам структуры»
textual
Листинг программы
Matrix *create_matrix(int row, int col) { Matrix *matrix; ... matrix->row = row; ...
Объяснение кода листинга программы
- В функции
create_matrix
создается указательmatrix
на структуруMatrix
. - Внутри функции не указаны действия, которые должны выполниться при создании матрицы, поэтому мы не можем продолжить список.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д