gpt4 book ai didi

c - 段错误 11、变量错误?

转载 作者:行者123 更新时间:2023-11-30 21:11:21 26 4
gpt4 key购买 nike

当我编译源文件时,我收到段错误:11 错误。我已经能够缩小范围,并且我知道错误来自此函数:

struct drecord { /* use this struct for double-linked lists */
int value;
struct drecord *previous;
struct drecord *next;
};

void sort()
{

struct drecord *currentNode;
struct drecord *end;
for(end=head->previous; end!=NULL && end!=head; end=end->previous)
{
for(currentNode = head; currentNode != NULL && currentNode != end; currentNode = currentNode->next)
{


if (currentNode->value > currentNode->next->value)
{
swap(currentNode, currentNode->next);
}

currentNode = currentNode->next;
}
}
printf("\n");

printf("%d", numElements);
while(numElements > 0)
{
currentNode = head;
printf("Sorted elements: %d", currentNode->value);
delete(currentNode->value);
numElements = numElements - 1;
}

}

void swap(struct drecord *drecord1, struct drecord *drecord2)
{
int aux = drecord1->value;
drecord1->value = drecord2->value;
drecord2->value = aux;
}

更具体地说,我认为它来自 printf("\n") 之后的代码部分,因为 printf("\n") 有效,但之后的代码不起作用。我原以为这是变量 numElements 的问题,但我在另一个源文件中有同样的代码,并且它工作得很好。 numElements 是一个全局变量。怎么了?

最佳答案

您的代码存在一些问题,但让我们重点关注可能导致您看到的崩溃的问题:

你调用了delete(currentNode->value);,但是value不是一个int吗?至少,这就是您在 swap 实现中对待它的方式。如果它是一个int,那么您到底要删除什么?

也许您的意图是删除 currentNode。但即使这样也是错误的:请注意,虽然这将成功删除 currentNode (当然假设它是用 new 分配的),但它不会更改头指针。它将继续指向它之前指向的位置:您刚刚调用删除的内存。

所以,无论哪种方式,你都完蛋了,你应该重新思考你在这个循环中所做的事情。

<小时/>

作为后记:虽然即使没有调试器,通过随意检查代码也很难发现这种错误,但花时间学习如何使用调试器。对于想要编程的任何人来说,这是一项关键技能,并且会带来好处:它不仅可以帮助您追踪错误,还可以让您更深入地了解正在发生的事情,并让您更好地进行编程。程序员在此过程中。

关于c - 段错误 11、变量错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23983641/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com