【发布时间】:2012-07-13 12:01:54
【问题描述】:
我需要有关链表的以下代码的帮助:
#include <stdlib.h>
#include <stdio.h>
struct nodo {
int d;
struct nodo *next;
};
struct nodo *full();
int main()
{
struct nodo *l;
/* l=(struct nodo *)malloc(sizeof(struct nodo)); */
l = full();
while(l!=NULL) {
printf("-->%d\n", l->d);
l =l->next;
}
system("PAUSE");
}
struct nodo *full()
{
int i;
struct nodo *head, *nes;
head = (struct nodo *)malloc(sizeof(struct nodo));
head->next = NULL;
for(i = 1; i < 5; i++) {
nes = (struct nodo *)malloc(sizeof(struct nodo));
printf("Insert the %d element:\n", i);
scanf("%d", &nes->d);
nes->next = head;
head = nes;
}
return head;
}
如果我尝试输入1, 2, 3, 4,我会得到以下输出:
-->4
-->3
-->2
-->1
-->9708864
为什么我得到最后一个数字?我的代码有什么问题?
【问题讨论】:
-
这是作业吗?另外:1.不需要在调用
full()之前转换malloc的结果,2.在调用full()之前不需要malloc,3.你没有调用free()... -
@EitanT 当然是;如果不是,OP 就不敢投 malloc() 的返回值。
-
@EitanT 我总是转换 malloc 的结果,因为是的,这是一个家庭作业,而且如果我不转换,我的编译器会返回这个错误:invalid conversion from
void*' tonodo*' Where should我打电话免费吗? -
@wild91 你的 C 编译器是什么蹩脚的? void * 必须隐式兼容任何指针类型。
-
@wild91 也许您正在使用 C++ 编译器进行编译?
void*不需要转换为另一个指针。另外,我冒昧地格式化了您的代码。下次将其标记为 [tag: homework]。
标签: c list linked-list