【发布时间】:2017-08-04 21:58:20
【问题描述】:
我正在尝试编辑部分后台堆栈以不使用 malloc,因为它总是失败。该代码使用 malloc 创建一个对象并插入到一个链表中。在下面的代码 sn-p 中,我注释掉了 malloc。我的计划是创建结构的本地实例并将其插入到我的列表中。我可以在我的列表中插入 2 个项目,当尝试添加第三个时,列表没有正确终止,我进入了一个无限的 while 循环。谁能看到为什么我的列表没有正确终止?
CHobjects 是一个结构,我想要一个它们的链表。我不能使用 malloc 创建新的 CHobject 实例。为了解决这个问题,我尝试创建一个 CHobject 的本地实例并将其添加到我的列表中。
CHobjects* newNode(instance, channel, name, description)
{
CHobjects *node;
CHobjects newNode;
node=CHobjects;
while(node!=NULL)
{
if(node->instance==instance)
return
node=node->next;
}
if(strlen((char *)objectName)>objectNameMax || strlen((char *)description)>descriptionMax)
goto cc8; //fail name or description is too long
// if((node=(CHobject *)malloc(sizeof(CHobject)))==NULL) //get a block of space for this object's info
// goto cc8; //fail if we can't get space for it
test.next=CHobjects; //link on to list
CHobjects=&test;
CHcount++;
}
此代码只是将元素添加到列表中,然后整个代码会将一些变量设置为默认值。
【问题讨论】:
-
请出示您的实际代码。
objectName在哪里定义?CHobject定义在哪里? -
请贴出真实代码。此外,使用良好的格式
strlen((char *)objectName)>objectNameMax和strlen((char *)objectName->objectNameMax看起来相同且令人困惑。 -
所以你会得到伪答案
-
node = CHobjects是什么意思?CHobjects是一种类型。你说的是无限循环。你是说它在while显示的语句中吗?这是您显示的唯一循环。这意味着您的链接列表没有正确构造,最后一个元素的next属性为 NULL。 -
您的代码没有多大意义。 CHobjects 似乎是一种结构类型,但稍后您在分配中使用此符号,例如指向此结构的指针。显然,您以不正确的方式编辑了代码以隐藏专有的脱轨。但是,这种混淆几乎无法帮助您。
标签: c linked-list embedded