我必须使用链表概念创建程序。它适用于Ubuntu的,ideone.com,但是当我把它提交给大学的测试仪,它报告分段故障/总线错误/内存 超限/堆栈超出限制(列表中的一个)。程序正在运行,但测试引发了分段错误
也许,问题是内存释放,因为只有DEVCPP跌下来,并且它会导致一段代码,我使用自由。
因此,我使用了Valgrind,但我无法理解,日志中写的是什么,但它仍在写入“无效的大小为8的读取”或无效的大小为8的写入。它与内存分配有关(sizeof块是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是下一个项目的指针。
请注意您的压痕(和整体的编码)的风格,它是不可读的。另外,你不应该使用'malloc()'的返回值,并且返回'void'的函数末尾的'return'是多余的(C不是BASIC)。 – 2012-12-09 21:08:22