1 个区块中的 12 个字节在丢失记录中仍可访问

12 bytes in 1 blocks are still reachable in loss record

提问人: 提问时间:11/20/2021 更新时间:11/20/2021 访问量:73

问:

我正在使用 C 并想创建一个包含 char 值的双向链表。我还有另一个文件供老师用来测量大 O 符号,所以我确定它是正确的。但是当我运行它时,我从终端得到一个 zsh:分段错误。

我通过 valgrind 运行它,它给了我标题中提到的错误,并提到了以下函数,更具体地说是 Malloc 和 strdup 命令。我不确定这里出了什么问题,对我来说看起来不错,所以希望在这里得到一些帮助。

下面是头文件中的结构:

struct node
{
struct node *next;
struct node *prev;
char *value;
};

下面是在主文件中创建节点的函数:

static struct node *make_node(const char *value)
{
struct node *result = malloc(sizeof(struct node));
result->value = strdup(value);
result -> next = NULL;
result -> prev = NULL;
return result;
}

为了更好地衡量,这里是调用make_node

ListPos list_insert(ListPos pos, const char *value)
{

struct node *node = make_node(value);

struct node *before = pos.node->prev;
struct node *after = pos.node;

node->next = after;
after->prev = node;

node->prev = before;
before->next = node;

pos.node = node;
return pos;
 }
c char malloc doublebly-linked-list

评论

0赞 Weather Vane 11/20/2021
你怎么知道(你会取消引用)不是?没有指针标记列表的末尾吗?pos.node->prevNULLNULL
0赞 11/20/2021
我还有另一个名为 list_end 的函数,用于检查该@WeatherVane
0赞 Weather Vane 11/20/2021
如果你的意思是可以,你应该在这里检查它们。例如,如果是,那么(也许)您需要修改头指针,因为没有上一个节点。beforeafterNULLbeforeNULL

答: 暂无答案