這是釋放單個鏈表的內存的C代碼。它使用Visual C++ 2008進行編譯,並且代碼正常工作。關於編譯器及其工作原理的問題
/* Program done, so free allocated memory */
current = head;
struct film * temp;
temp = current;
while (current != NULL)
{
temp = current->next;
free(current);
current = temp;
}
但我也遇到過(甚至在書)這樣寫的相同代碼:
/* Program done, so free allocated memory */
current = head;
while (current != NULL)
{
free(current);
current = current->next;
}
如果我編譯的代碼與我的VC++ 2008,程序崩潰,因爲我第一次釋放電流,然後分配當前 - >下一個電流。但顯然,如果我用其他編譯器(例如,本書作者使用的編譯器)編譯此代碼將會起作用。所以問題是,爲什麼這個代碼是用特定的編譯器工作編譯的?是否因爲編譯器把指令放在二進制文件中,記住current-> next的地址,儘管我釋放了current,而我的VC++卻沒有。我只想了解編譯器是如何工作的。
哪些書是那些? – 2010-04-14 10:31:33
@尼爾,壞的。 – 2010-04-14 10:34:04
請告訴我們這本書,這樣我們可以避免它,並建議反對它。 – 2010-04-14 10:37:19