gpt4 book ai didi

c - 来自内核的 SIGSEGV

转载 作者:行者123 更新时间:2023-11-30 18:32:34 27 4
gpt4 key购买 nike

我有一个从用户空间程序动态修改(添加和删除)的节点链接列表。节点分配始终在用户空间的可能性有多大?

普通链表节点,

struct node {
int x;
struct node *next;
};

我收到这个问题是因为当我遍历列表时,内核发送了一个 SIGSEGV向该用户空间进程发出信号。此外,每当我创建新节点时,我都会进行 NULL 指针检查。

我还知道内核发送 SIGSEGV如果进程尝试访问内核内存,则发出信号。

最佳答案

SIGSEGV 是段错误。这意味着您的程序正在尝试访问不在程序分配的内存范围或段内的区域中的内存。分段是一个丑陋的系统,人们过去必须直接处理它,但现在不再那么频繁了。今天对您来说意味着您的代码很可能引用空指针或某些未初始化的值。

您应该做的是将调试器连接到您的程序,并查看哪个地址导致抛出 SIGSEGV。一旦你看到它,它很可能是 0x0,或者一些垃圾值,比如 0xDEADC0DE 之类的。

您可能没有将节点中的所有指针设置为 0x0。在构造函数中执行此操作,并仔细检查您的 addNode() removeNode() 函数,以确保您没有悬挂的指针。

关于c - 来自内核的 SIGSEGV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12316810/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com