大佬们帮我看看这个程序怎么会这样。运行一下输入两个数后。
|
#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 |
免责声明:本内容仅代表回答者见解不代表本站观点,请谨慎对待。
版权声明:作者保留权利,不代表本站立场。
|
|
|
|
|
|
|
先说最明显的。第 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 这个头文件! |
|
|
|
|
|
|
|