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

  • 本文关键字:malloc 错误 printf c malloc
  • 更新时间 :
  • 英文 :

#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("%dn", 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("%dn", 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;

相关内容

  • 没有找到相关文章

最新更新