在linux上访问链表或执行malloc()时出现分段错误

在linux上访问链表或执行malloc()时出现分段错误,c,segmentation-fault,malloc,C,Segmentation Fault,Malloc,我在Linux系统上遇到分段错误问题。 我使用的代码来自Aho和Ullman的“计算机科学基础”C版。 这是密码 #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 *LIS

我在Linux系统上遇到分段错误问题。 我使用的代码来自Aho和Ullman的“计算机科学基础”C版。 这是密码

#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);
}
#包括
#包括
#包括
typedef结构que_元素
{
长地址;
长内存数据;
int-msg;
}Qq;
类型定义结构单元*列表;
结构单元
{
Qq-el;
int元素;
下一个列表;
};
Qq元素;
类型定义结构
{
前面的列表;
列表后方;
}排队;
main()
{
队列*l1c2l1d;/*L1控制器到L1数据*/
l1c2l1d->front=malloc(尺寸*l1c2l1d);
}
有没有我遗漏的初始化步骤

是的,
l1c2l1d
在代码中未初始化。取消引用意味着取消引用
NULL
(因为
l1c2l1d
是全局的)。试试这个:

l1c2l1d = malloc(sizeof *l1c2l1d);
l1c2l1d->front...
根据上次编辑进行编辑 你有这个:

在本例中,
l1c2l1d
未初始化,它指向垃圾。试试这个(这次复制粘贴它):


你似乎在追求以下几点:

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

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

如果要表示
true
/
false
,请使用
typedef char BOOLEAN
int
通常在32位上有4个字节,而
char
总是有1个字节。@Gandaro但是int通常比
char
更快访问。为什么要定义自己的布尔值而不是包含它呢?我刚刚尝试了l1c2l1d=malloc(sizeof*l1c2l1d),但它也会导致分段错误。我刚刚尝试在main()中定义l1c2l1d,仍然存在分段错误。@标记其他原因(如您的
enqueue
函数)。我删除了所有函数定义(enque、deque等)。我只有main()以及队列和链接列表定义。它仍然死在第一条线上(马洛克)。我想是时候下注了。我将使用一个结构数组作为链接列表。没有那么花哨,但我不必担心malloc()。谢谢你的帮助。
main()
{
    QUEUE *l1c2l1d; /*L1 Controller to L1 Data */

    l1c2l1d = malloc(sizeof *l1c2l1d);
    l1c2l1d->front = malloc(*l1c2l1d->front);
}
main()
{
    QUEUE l1c2l1d = { 0, 0 }; /*L1 Controller to L1 Data */

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