快捷导航

大佬们帮我看看这个程序怎么会这样。运行一下输入两个数后。

#include using namespace std;#include struct list{         int data;        struct list *next;};struct list * creatlist()  //创建一个带头结点的单向链表,链表结点中的数据通过键盘输入,当输入数据为-1时,表示输入结束。{        struct list *p1,*p2,*head;        int n=1;        head=NULL;        p1=p2=( struct list*)malloc(sizeof(struct list));        coutdata!=(-1))        {                if(n==1)head=p1;                else p2->next=p1;                p2=p1;                free(p1);                cin>>p1->data;        }        p2->next=NULL;        return(head);}void print(list *L)  //打印链表{  struct list *p;  p=L;  do  {          coutnext;                n++;        }        n=x/n;        cout

免责声明:本内容仅代表回答者见解不代表本站观点,请谨慎对待。

版权声明:作者保留权利,不代表本站立场。

回复

使用道具 举报

参与会员1

先说最明显的。第 24 行,你把 p1 free 了! 那么 25 行再次访问 p1 就已经不正确了!
而且,在 19 行的 while 循环中,由于 n 的值没有变化,所以每次循环都会执行 21 行——也就是每次 head 和 p2 都指向 p1 所指的节点。 但在第一次循环执行 24 行以后,p1 所指的节点已经不合法了,所以整个 while 就是不断向一个不合法的内存中写入数据! 链表根本就没有建立起来。
其他代码还没有看,但creatlist 中的问题就不小了...


还有,你这个是 C++ 代码吧? 在 C++ 中的沿袭的 C 语言库函数的头文件名并不是 C 语言风格的 xxx.h,而是 cxxx! 比如 stdlib.h 这个 C 语言库函数头文件在 C++ 中应该写 。 一个标准的 C++ 环境中就没有stdlib.h 这个头文件!
回复

使用道具 举报

可能感兴趣的问答

发新帖
  • 微信访问
  • 手机APP