C 未传递指针,printlist不工作
以下代码中的printlist函数不起作用。当我从主函数传递节点指针时,该值不会被传递C 未传递指针,printlist不工作,c,pointers,modularity,C,Pointers,Modularity,以下代码中的printlist函数不起作用。当我从主函数传递节点指针时,该值不会被传递 void printlist(node *head) { node *current=head; while(current!=NULL) { printf("\n %d",current->data); current=current->next; } } int main(void) { int ch=1;
void printlist(node *head)
{
node *current=head;
while(current!=NULL)
{
printf("\n %d",current->data);
current=current->next;
}
}
int main(void)
{
int ch=1;
int choice=1;
while(ch=1)
{
node *head;
head=(node*)malloc(sizeof(node));
printf("Press 1 for create list \n2 for display \n3 for add at end of list \n");
scanf("%d",&choice);`
switch(choice) {
case 1:
head=createlist();
node *current=head;
break;
case 2:
printf("Welcome to list printer");
printlist(head);
break;
}
}
}
**注意:-创建列表工作正常。我没有将其放在此处以减小问题大小,我尝试在主函数中使用相同的打印技术,效果非常好。仅当我尝试将其作为函数实现时,错误才开始出现。您的主要问题是:
while(ch=1)
{
node *head;
head
是块的本地,而块是块的本地。在案例1
上创建新列表后,该变量将超出范围并在循环出现之前消失,以便您有机会打印它。所以您只是将未初始化的内存传递给printlist()
。你需要:
node * head;
while (ch=1) {
您的代码还有许多其他问题:
ch=1
意味着while循环永远不会结束,您似乎永远不会改变ch
- 您为
head
调用malloc()
内存,但在调用createlist()
时覆盖head
的值,并在未使用该内存的情况下丢失该内存
节点*current
从未使用过
- 不要从
malloc()
您的主要问题是:
while(ch=1)
{
node *head;
head
是块的本地,而块是块的本地。在案例1
上创建新列表后,该变量将超出范围并在循环出现之前消失,以便您有机会打印它。所以您只是将未初始化的内存传递给printlist()
。你需要:
node * head;
while (ch=1) {
您的代码还有许多其他问题:
ch=1
意味着while循环永远不会结束,您似乎永远不会改变ch
- 您为
head
调用malloc()
内存,但在调用createlist()
时覆盖head
的值,并在未使用该内存的情况下丢失该内存
节点*current
从未使用过
- 不要从
malloc()
您是在调试器中单步执行代码,还是在代码中放入一些printf语句来检查值?这将是第一件要尝试的事情。显示您的所有代码。您确定您的createlist()
函数工作正常吗?请注意,您的while循环已中断,它可能应该使用==您还malloc()
空间作为head
,然后在调用createlist()
时完全覆盖并丢失它。案例1
下的节点*current
也将是开关
块的本地节点,您不使用它。另外,不要从malloc()
中强制执行返回。实际上,每次执行该循环时,您都会丢失创建的列表。您想将节点*头
移出循环。您是在调试器中单步执行代码还是在代码中放入一些printf语句来检查值?这将是第一件要尝试的事情。显示您的所有代码。您确定您的createlist()
函数工作正常吗?请注意,您的while循环已中断,它可能应该使用==您还malloc()
空间作为head
,然后在调用createlist()
时完全覆盖并丢失它。案例1
下的节点*current
也将是开关
块的本地节点,您不使用它。另外,不要从malloc()
中强制执行返回。实际上,每次执行该循环时,您都会丢失创建的列表。您想将节点*head
移动到循环之外。Paul,感谢您的回答,问题是这只是代码的一个片段,ch的值在下面的一种情况下发生了更改,代码在没有printlist函数的情况下工作,如果打印是在主函数内完成的。@nahraved:ch
的问题是最小的问题。正如我所说的,主要问题是head
的范围。以后,请确保您发布了您想要答案的实际代码。如果您发现自己引用了其他可能遗漏的代码,那么您就有可能完全浪费任何试图帮助您的人的时间。如果您提交了一个代码片段,请确保该代码片段已编译,并显示您的问题本身。没有人能帮你处理他们看不见的随机代码。对不起,保罗。我是新来的,我保证不会再发生这种情况。我会修复范围并回复你,非常感谢。我刚刚交换了头部的位置,代码成功了。:)很高兴你弄明白了。如果你需要的话,请接受答案。Paul,谢谢你的回答,问题是这只是代码的一部分,ch的值在下面的一种情况下发生了变化,代码在没有printlist函数的情况下工作,如果打印是在主函数内完成的。@nahraved:ch
的问题是最小的问题。正如我所说的,主要问题是head
的范围。以后,请确保您发布了您想要答案的实际代码。如果您发现自己引用了其他可能遗漏的代码,那么您就有可能完全浪费任何试图帮助您的人的时间。如果您提交了一个代码片段,请确保该代码片段已编译,并显示您的问题本身。没有人能帮你处理他们看不见的随机代码。对不起,保罗。我是新来的,我保证不会再发生这种情况。我会修复范围并回复你,非常感谢。我刚刚交换了头部的位置,代码成功了。:)很高兴你弄明白了。如果答案是你所需要的,请接受。