我必須使用鏈表概念創建程序。它適用於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