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