C Simple List add Elements in a for-loop 不会工作,手动工作

标签 c list memory-management data-structures

这个有效:

struct list
{
    int value;
    struct list *next;
};

void addElement(struct list **l, int value)
{
    if( *l == 0 )
    {
        *l = (struct list *) malloc(sizeof(struct list));
        (*l)->value = value;
        (*l)->next = 0;
    }
    else
    {
        struct list *new_element = (struct list *) malloc(sizeof(struct list));
        new_element->value = value;
        new_element->next = *l;
        *l = new_element;
    }
}

void printList(struct list *l)
{
    struct list *temp;
    for(temp = l;temp; temp = temp->next)
    printf("%d ->", temp->value);
    printf("%d",0);
}

int main(int argc, char **argv)
{
    printf("Einfache verkettete Liste: ");
    struct list *mylist;    
    int i;

    addElement(&mylist,10);
    addElement(&mylist,10);
    addElement(&mylist,10);
    addElement(&mylist,10);
    addElement(&mylist,10);
    addElement(&mylist,10);
    addElement(&mylist,10);
    addElement(&mylist,10);
    addElement(&mylist,10);
    addElement(&mylist,10);

    printList(mylist);

    return 0;
}

输出:

Einfache verkettete Liste: 10 ->10 ->10 ->10 ->10 ->10 ->10 ->10 ->10 ->10 ->0

但是如果我改变:

addElement(&mylist,10);
addElement(&mylist,10);
addElement(&mylist,10);
addElement(&mylist,10);
addElement(&mylist,10);
addElement(&mylist,10);
addElement(&mylist,10);
addElement(&mylist,10);
addElement(&mylist,10);
addElement(&mylist,10);

到:

for(i=0;i<10;i++)
    addElement(&mylist,10);

它在运行时给出内存错误?它非常困惑,我不知道发生了什么。如何调试?

最佳答案

您从未将 mylist 初始化为 null,因此您第一次调用 addElement 时,*l == 0 是真的。看似无关紧要的代码重新排列会改变你的运气。

关于C Simple List add Elements in a for-loop 不会工作,手动工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18856628/

相关文章:

c++ - Arduino - 如何从serial.read()提供结构?

arrays - 在带有数组的语句中使用 OR,(C)

Python 返回数字列表的线性/累积对

c++ - 使用 shared_ptr 列表撤消/重做

c++ - 在 COM 对象上使用 std::map?

C++ 删除具有有效地址的指针

c - 如何跟踪某个循环的运行量并将值存储到数组中

c - 为什么在没有类型转换 4.7 的情况下, float 据类型在这段代码中不起作用?

list - Scala:创建相同类型的新列表

c - C 会自动释放没有指针的内存吗?