【问题标题】:Error, linked lists using C programming错误,使用 C 编程的链表
【发布时间】:2017-01-02 21:06:59
【问题描述】:

我正在尝试编写简单的推送功能,一切都很好,直到运行时,执行的代码崩溃。哪位大神能解释一下原因吗?

#include<stdio.h>
#include<stdlib.h>

typedef struct list{
int order;
struct list *next;

}list;

void push(struct list **arg,int i);

int main()
   {
struct list **ptr=NULL;

for(int i=0;i<10;++i){
    push(ptr,i);
  }

return 0;
     }

void push(struct list **arg,int i){

 struct list *temp;
 temp= malloc(sizeof(list));

temp->order=i;

temp->next=*arg;

*arg=temp;

}

【问题讨论】:

  • struct list **ptr=NULL; 需要是 struct list *ptr=NULLpush(ptr,i); 然后变成 push(&amp;ptr,i);

标签: c linked-list push singly-linked-list


【解决方案1】:

list *ptr=NULL;
     ^^^           
for(int i=0;i<10;++i){
    push( &ptr,i);
         ^^^^
  }

否则如果这样声明

struct list **ptr=NULL;

然后这个解引用

*ptr

导致未定义的行为。

【讨论】:

  • 但是当我将它传递给另一个函数(如打印函数)时它工作正常,你能解释一下原因吗?
  • void print_list(list ** head) { while ((*head) != NULL) { printf("%d\n", (*head)->order); // 工作正常 ! *head = (*head)->下一个; } }
  • @YasserMohamed 我不知道您现在如何添加新元素以及如何调用该函数。您可以提出一个新问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-22
  • 1970-01-01
相关资源
最近更新 更多