一個問題,我找不到任何有關在互聯網上任何東西。我有這樣的小片在Linux發行版喘息運行的C代碼(樹莓派,但那不是相關的):免費()一個由系統消耗的緩衝()
void function(const char * command)
{
// Define commands for in between parameters
char commandPre[] = "echo ";
// Get the lengths of the strings
int len= strlen(command) + strlen(commandPre);
// Allocate the command
char * fullCommand = (char *) malloc(len * sizeof(char));
// Build the command
strcat(fullCommand, commandPre);
strcat(fullCommand, command);
// Execute command
system(fullCommand);
// Free resources
free(fullCommand);
}
現在,我運行這段代碼從一個服務程序。但是當它第二次達到free(fullCommand)時(當函數在程序中第二次被調用時),程序崩潰並且存在。當我刪除免費(fullCommand)時,它按預期工作。
我的問題是:是系統()已釋放「fullCommand」給我嗎?如果是這樣,爲什麼第二次而不是第一次?我在這裏錯過了什麼嗎?
P.S.其實命令是建立strcat'ed在一起有若干字符串組成,但上述是其最基本的形式
啊對,愚蠢的愚蠢的愚蠢我*擊中頭*。謝謝!我一直在編程C#一段時間,我完全忘記了終結者。此外,我總是這樣做,因爲它速度很快,但檢查返回值是更好的練習,謝謝你的提示! – Maarten
@Maarten「它快」?它不能更快(打字,我假定你的意思是)而不是*鍵入演員陣容,可以嗎?沒有性能差異,演員也沒有比檢查返回值更「糟糕」,而是完全不同的東西。演員將愉快地將一個NULL轉換爲一個字符指針,然後事情就會中斷。 – unwind