Segmentation fault. Присвоение значений элементам структуры - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Компилируется как надо. На винде падает после запуска, на линуксе после запуска выдает sigmentation fault (Ошибка сегментирования. Сделан дамп памяти). Очевидно, что проблема в неверном присваивании значений элементам объекта типа Matrix. Но как правильно присвоить значения не могу понять. Прошу подсказать, в чем дело. П.С. Знаю, что можно сделать без структур и в функции выделения дин.памяти обойтись без указателей, но наличие typedef struct, названия функций и передаваемые в них значения были в шаблоне задания.
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. typedef struct Matrix
  4. {
  5. double **values;
  6. int col;
  7. int row;
  8. } Matrix;
  9. Matrix *matrix;
  10. Matrix *create_matrix(int row, int col)
  11. {
  12. Matrix *matrix;
  13. double **matrix_array = (double**)malloc(row*sizeof(double*));
  14. int k;
  15. for(k = 0; k<=row; k++)
  16. {
  17. matrix_array[k] = (double *)malloc(col*sizeof(double));
  18. }
  19. if(matrix_array ==NULL)
  20. {
  21. printf("Not enough memory!\n");
  22. }
  23. matrix->row = row;
  24. matrix->col = col; //Видимо, вот в этих присваиваниях основная проблема.
  25. matrix->values = matrix_array;
  26. return matrix;
  27. }
  28. void *create_matrix_from_file(FILE* file)
  29. {
  30. int i, k, row, col;
  31. if(file == NULL)
  32. {
  33. printf("Can not open file");
  34. }
  35. else
  36. {
  37. fseek(file , 0 , SEEK_END);
  38. long lSize = ftell(file);
  39. rewind (file);
  40. int buff[lSize];
  41. for(i = 0; i<lSize; i++)
  42. {
  43. fscanf(file, "%i", &buff[i]);
  44. }
  45. row = buff[0];
  46. col = buff[1];
  47. printf("\n*************\n");
  48. Matrix *matrix = create_matrix(row, col);
  49. //
  50. printf(" !!!row = %i\n", matrix->row);
  51. printf("!!!col = %i\n", matrix->col);
  52. k = 2;
  53. int j;
  54. for(i = 0; i< row; i++)
  55. {
  56. for(j = 0; j< col; j++)
  57. {
  58. matrix->values[i][j] = buff[k];
  59. k++;
  60. printf("%.01lf ", matrix->values[i][j]);
  61. }
  62. printf("\n");
  63. }
  64. }
  65. }

Решение задачи: «Segmentation fault. Присвоение значений элементам структуры»

textual
Листинг программы
  1. Matrix *create_matrix(int row, int col)
  2. {
  3.     Matrix *matrix;
  4.     ...
  5.     matrix->row = row;
  6.     ...

Объяснение кода листинга программы

  1. В функции create_matrix создается указатель matrix на структуру Matrix.
  2. Внутри функции не указаны действия, которые должны выполниться при создании матрицы, поэтому мы не можем продолжить список.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы