インターネット上で何も見つけられなかった質問。Linux Wheezy ディストリビューション (Raspberry Pi ですが、関係ありません) で実行されているこの小さな 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) に2回到達すると(プログラムで関数が2回呼び出されると)、プログラムがクラッシュして存在します。free(fullCommand) を削除すると、期待どおりに動作します。
私の質問は次のとおりです: system() はすでに "fullCommand" を解放していますか? もしそうなら、なぜ1回目ではなく2回目でうまくいくのでしょうか? ここで何か不足していますか?
PS 実際には、コマンドは strcat された複数の文字列で構成されていますが、上記は最も基本的な形式のコードです