有人能告诉我这个程序正在构建的确切列表是什么吗? (程序没有运行,这很好)。此外,您可以向我指出与列表相关的任何代码行都会非常感激,我无法跟踪此程序。
所有我似乎都看到它似乎是一个链接的节点列表,其中包含来自“值”的数据?不过我不知道,只是丢了。
#include <stdio.h>
#include "sNode.h"
int main()
{
int i;
int rV = 0;
List l = NULL;
char* input[] = { "06", "24", "3" };
sNode *s, *t;
for( i=0; i<3; ++i )
{
t = (sNode*)malloc( sizeof( sNode ));
if( t == NULL )
{
fprintf( stderr, "Couldn't get memory for a node! Exiting." );
rV = 1;
break;
}
t->data = input[i];
t->next = l;
l = t;
}
s = l;
while( s != NULL )
{
t = s->next;
free( s );
s = t;
}
return rV;
}
答案 0 :(得分:0)
如何追踪程序的对象
我们在这里看l
,因为它是List
类型,有问题的对象。 l
被更改的行是
int main()
{
List l = NULL;
for( i=0; i<3; ++i )
{
l = t;
}
}
似乎t
被分配到l
所以我们会看t
:
int main()
{
List l = NULL;
sNode *s, *t;
for( i=0; i<3; ++i )
{
t = (sNode*)malloc( sizeof( sNode ));
if( t == NULL )
{
fprintf( stderr, "Couldn't get memory for a node! Exiting." );
rV = 1;
break;
}
t->data = input[i];
t->next = l;
l = t;
}
while( s != NULL )
{
t = s->next;
}
现在更清楚的是发生了什么。 malloc
正在为sNode
的地址分配大小为t
的动态内存。根据{{3}},t->next
指向下一个元素(通过l
将其重新分配到t->next = l
。继续执行此操作; 提示您自s
被更改后,请查看s
。t
的成员数据似乎正在重新分配,特别是它现在等于&input + sizeof(i)
的输入。
答案 1 :(得分:0)
指向链表的头部。 所以l被赋予NULL开头,即空链表。
在for循环的第一次迭代中,创建一个节点并为其分配值&#34; 06&#34;。 l设置为指向新创建的节点。所以你有:
l ---&gt; (&#34; 06&#34;,NULL)
在for循环的第二次迭代中,创建一个节点并为其分配值&#34; 24&#34;。 l设置为指向新创建的节点。所以你有:
l ---&gt; (&#34; 24&#34;,next = ---)---&gt; (&#34; 06&#34;,next = NULL)
在for循环的第三次迭代中,创建一个节点并为其分配值&#34; 3&#34;。 l设置为指向新创建的节点。所以你有:
l ---&gt; (&#34; 3&#34;,next = ---)---&gt; (&#34; 24&#34;,next = ---)---&gt; (&#34; 06&#34;,next = NULL)
最后你有一个链表,其中元素插在前面。