當你在C中的char指針上調用strtok時會發生什麼,我有些困惑。我知道它修改了字符串的內容,所以如果我在名爲'line'的變量上調用strtok,它的內容將會改變。假設我遵循以下方法:如何正確使用C中的strtok,所以沒有內存泄漏?
void function myFunc(char* line) {
// get a pointer to the original memory block
char* garbageLine = line;
// Do some work
// Call strtok on 'line' multiple times until it returns NULL
// Do more work
free(garbageLine);
}
進一步假定'行'在傳遞給myFunc之前是malloced。我是否應該在使用strtok之後釋放原始字符串,還是爲我們完成這項工作?另外,如果'行'不是malloced,我試圖使用上面的函數會發生什麼?改爲執行以下操作更安全嗎? (假設程序員不會打電話免費的,如果他知道了行不malloced)
調用
char* garbageLine = line;
myFunc(line);
free(garbageLine);
函數定義
void function myFunc(char* line) {
// Do some work
// Call strtok on 'line' multiple times until it returns NULL
// Do more work
}
我在這兩種方法中解除分配內存的方式是正確的嗎?我想知道的是,如果strtok隱式地釋放內存。請記住,我不是這門語言的專家。 – user246392 2011-02-15 05:54:04
@ user246392:正如我在我的回答中所說的,調用`strtok()`對分配的內存沒有任何影響。它不分配或釋放任何內存。這與分配或釋放內存的問題無關。通常,從分配它的同一個例程中釋放內存是有意義的,但如果這不適合您的應用程序,那麼真正重要的是釋放內存。 – 2011-02-15 06:18:07
@ user246392無法確定您是否正確釋放內存,因爲我們無法知道您是如何分配內存的。我可以說,你幾乎肯定是做錯了。 – 2011-02-15 09:15:11