这段代码正在构建的列表是什么?

时间:2015-05-03 17:09:03

标签: c list singly-linked-list

有人能告诉我这个程序正在构建的确切列表是什么吗? (程序没有运行,这很好)。此外,您可以向我指出与列表相关的任何代码行都会非常感激,我无法跟踪此程序。

所有我似乎都看到它似乎是一个链接的节点列表,其中包含来自“值”的数据?不过我不知道,只是丢了。

   #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;
}

2 个答案:

答案 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被更改后,请查看st的成员数据似乎正在重新分配,特别是它现在等于&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)

最后你有一个链表,其中元素插在前面。