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;
    ...

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

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

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


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

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

8   голосов , оценка 4 из 5
Похожие ответы