Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 20.02.2016
Сообщений: 3
1

Segmentation fault. Присвоение значений элементам структуры

04.10.2016, 02:34. Показов 1535. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Компилируется как надо. На винде падает после запуска, на линуксе после запуска выдает sigmentation fault (Ошибка сегментирования. Сделан дамп памяти). Очевидно, что проблема в неверном присваивании значений элементам объекта типа Matrix. Но как правильно присвоить значения не могу понять. Прошу подсказать, в чем дело.
П.С. Знаю, что можно сделать без структур и в функции выделения дин.памяти обойтись без указателей, но наличие typedef struct, названия функций и передаваемые в них значения были в шаблоне задания.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#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");
        }
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.10.2016, 02:34
Ответы с готовыми решениями:

Запись числа из файла в три очереди, ошибка: Segmentation fault после ввода значений
Ошибка segmentation fault после ввода значений, которые определяют, в какую из очередей будет...

Присвоение значений элементам массива
Пишу на С простенькую функцию exchange(), которая элементу массива a присваивает значение элемента...

Segmentation fault
При добавлении одной структуры в список, то всё норм. Но когда больше - сразу segmentation fault....

Segmentation fault
Помогите найти плз ошибку(и), из-за которой происходит ошибка сегментации Само задание: дана...

2
Вездепух
Эксперт CЭксперт С++
11696 / 6375 / 1724
Регистрация: 18.10.2014
Сообщений: 16,070
04.10.2016, 03:34 2
Цитата Сообщение от __Klim Посмотреть сообщение
C
1
2
3
4
5
6
Matrix *create_matrix(int row, int col)
{
    Matrix *matrix;
    ...
    matrix->row = row;
    ...
Под сам объект Matrix пямять нигде не выделяется, указатель matrix содержит мусор.

Неудивительно, что при попытке matrix->row = row; все сразу падает.
1
0 / 0 / 0
Регистрация: 20.02.2016
Сообщений: 3
04.10.2016, 14:34  [ТС] 3
Спасибо! Очень помогли!
0
04.10.2016, 14:34
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.10.2016, 14:34
Помогаю со студенческими работами здесь

Segmentation fault: 11
Смысл программы: вводят строку, я должен разделить на слова, если что-то в кавычках - присоединить...

Segmentation fault
а) qsort(v, left, last-1, comp); б) qsort(v, left, last--, comp); Ребята чем отличается функция...

Segmentation fault
Добрый день! У меня следующая проблема: Есть функция real *Interpolate(real **tab, real rr),...

Присвоение значений элементам вложенной структуры
Необходимо присвоить значение элементам массива структур struct message { unsigned char code;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru