我必须使用链表概念创建一个程序。它适用于 ubuntu、ideone.com,但是当我将其提交给大学测试人员时,它会报告分段错误/总线错误/超出内存限制/超出堆栈限制(列表之一)。
可能问题是内存释放,因为只有 DevCpp 崩溃,它会导致我使用免费的一段代码。
所以,我使用了Valgrind,但是我不太明白,日志中写了什么,但它仍然在写“Invalid read of size 8”或Invalid write of size 8。而且它与内存分配有关(sizeof blocks是8,但我认为并非总是如此)。此外,还写了-“错误摘要:来自 48 个上下文的 76 个错误(抑制:2 个来自 2)”和“总堆使用量:20 个分配,20 个释放,160 个字节分配”(我认为这些行很重要)。
最后,有一段可能有问题的代码。
TITEM *borrowItem(const char *to)
{
TITEM *newItem = (TITEM *)malloc(sizeof(newItem));
newItem->m_Next = NULL;
newItem->m_To=(char *)malloc(sizeof(to));
strcpy(newItem->m_To,to);
newItem->m_Cargo = NULL;
return newItem;
}
我想这个问题已经在分配中了。此函数用于创建新的列表项指针。内存在这里被释放:
void freeItem(TITEM *item)
{
free(item->m_To);
free(item);
return;
}
m_To 是字符串,m_Next 是下一项指针。