gpt4 book ai didi

c - 不使用 printf() 时出现 malloc 错误

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

#include <stdio.h>
#include <stdlib.h>
typedef struct lis
{
int num;
struct lis * next;
} list;
void fun(list ** h, int nu) {
*h = malloc(sizeof(list)*nu);
list *p = *h;
int i=1;
list * nextx;
while(i<=nu) {
nextx = p + 1;
p->num = i;
p->next = nextx;
//printf("%d\n", nextx);
p += 1;
i++;
}
p->next = NULL;
}


int main(int argc, char const *argv[])
{
list * first = NULL;
fun(&first,10);
free(first);
return 0;
}

我正在学习c中的列表

每当运行此代码时,都会出现 malloc 错误

如果我注释掉 printf("%d\n", nextx); 它显示下一个节点,它工作正常。

发生了什么?

最佳答案

在循环的最后一次运行中,您的代码执行以下操作:

nextx = p+1; // points one past the last array' element
p->num = nu-1; // ok
p->next = p+1; // probably not what you wanted, but not a fault per se
p += 1; // This is the cause of your problem
i++; // out of the loop...
p->next = NULL; // dereference out of array pointer!

退出前一步循环,然后正确设置最后一个元素:

while (i<nu) {
...
}
p->next = NULL;
p->num = nu-1;

关于c - 不使用 printf() 时出现 malloc 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42184860/

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