ошибка сегментации при доступе к связанному списку или выполнении malloc () в linux - PullRequest
1 голос
/ 18 февраля 2012

У меня проблемы с ошибкой сегментации в системе Linux. Я использую код из издания "Основы информатики" Ахо и Уллмана. Это код

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct que_element
{
    long mem_address;
    long mem_data;

    int msg;
} Qq;

typedef struct CELL *LIST;
struct CELL
{

    Qq el;

    int element;
    LIST next;
};


Qq l1element;

typedef struct
{
    LIST front;
    LIST rear;
} QUEUE;

main()
{
    QUEUE *l1c2l1d; /*L1 Controller to L1 Data */

    l1c2l1d->front = malloc(sizeof *l1c2l1d);
}

Ответы [ 2 ]

2 голосов
/ 18 февраля 2012

Есть ли этап инициализации, который я пропускаю?

Да, l1c2l1d неинициализирован в вашем коде. Разыменование это означает разыменование NULL (поскольку l1c2l1d является глобальным). Попробуйте это:

l1c2l1d = malloc(sizeof *l1c2l1d);
l1c2l1d->front...

РЕДАКТИРОВАТЬ В свете последнего редактирования

У вас есть это:

main()
{
    QUEUE *l1c2l1d; /*L1 Controller to L1 Data */

    l1c2l1d->front = malloc(sizeof *l1c2l1d);
}

В этом случае l1c2l1d неинициализирован, это указывает на мусор. Попробуйте это ( скопируйте и вставьте на этот раз ):

main()
{
    QUEUE *l1c2l1d; /*L1 Controller to L1 Data */

    l1c2l1d = malloc(sizeof *l1c2l1d);
    l1c2l1d->front = malloc(*l1c2l1d->front);
}
0 голосов
/ 19 февраля 2012

Вы, кажется, собираетесь что-то вроде:

main()
{
    QUEUE l1c2l1d = { 0, 0 }; /*L1 Controller to L1 Data */

    l1c2l1d->front = l1c2l1d->rear = malloc(sizeof CELL);
}
...