首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++中链表的问题

C++中链表的问题
EN

Stack Overflow用户
提问于 2009-06-15 20:48:23
回答 3查看 496关注 0票数 1

我用C语言创建了一个链表(结构),但我希望能够调用一个函数,并让它自己向链表中添加4-5个结构。问题是,因为在C中,函数中创建的所有变量都留在堆栈/堆中,所以我不知道该如何完成这一任务。

下面是一个代码示例:

代码语言:javascript
复制
struct listItem
{
   int value;
   listItem *left;
   listItem *right;
}

void addItems(listItem *l)
{
   listItem one, two, three;
   l->left = &one;
   one.left = &two;
   two.left = &three;
}

int main (char *a [])
{
   listItem l;
   addItems(l);
}

显然这是行不通的。我如何才能做到这一点呢?有没有可能。谢谢

编辑:哇,谢谢大家的帮助。这比我想象的更快,更有帮助!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-06-15 20:50:44

你必须使用malloc()来分配你的“一”、“二”、“三”,而不是在堆栈上创建它们。在使用完它们之后,您必须再次遍历列表并调用内存上的free (),这样您的程序才不会泄漏。

请尝试此addItem ...

代码语言:javascript
复制
void addItem(listItem *l, int value)
{
   listItem* item = malloc (sizeof (listItem));
   item->value = value;
   item->next = 0;
   item->prev = l; // Probably not what you want, but you were only singly linking in the example

   l->next = item;
}
票数 5
EN

Stack Overflow用户

发布于 2009-06-15 20:53:55

在此代码中:

代码语言:javascript
复制
void addItems(listItem *l)
{
   listItem one, two, three;
   l->left = &one;
   one.left = &two;
   two.left = &three;
}

所有的变量都留在堆栈上,而不是堆上。您可能希望在堆上分配它们,以便您可以引用指向它们的指针,该指针一旦离开堆栈帧就不会无效:

代码语言:javascript
复制
void addItems(listItem *l)
{
   listItem *one=calloc(1, sizeof(*one)), 
     two=calloc(1, sizeof(*two)),
     three=calloc(1, sizeof(*three));
   l->left = one;
   one.left = two;
   two.left = three;
}
票数 3
EN

Stack Overflow用户

发布于 2009-06-15 20:54:43

addItems()必须分配内存:

代码语言:javascript
复制
void addItems(listItem *l)
{
   listItem* one = (listItem*)malloc(sizeof(listItem));
   listItem* two = (listItem*)malloc(sizeof(listItem));
   listItem* three = (listItem*)malloc(sizeof(listItem));
   l->left = 0;
   l->right = one;
   one->left = l;
   one->right = two;
   two->left = one;
   two->right = three;
   three->left = two;
   three->right = 0;
}

int main ()
{
   listItem l;
   addItems(&l);
}

我假设你想创建一个双向链表,所以我可以自由地设置相应的左/右指针。如果我的假设是错误的,请调整它以满足您的需求。

干杯

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/998303

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档