問題を解決しようとして、誤って次のコードをコードに入れました。
/* simplified for context*/
char *command = NULL;
char *new_command = (char *) malloc(10);
...
free(command);
command = (char *) malloc (new_command + 1);
strcpy(command, new_command);
問題なく実行されただけでなく、元の問題も解消されました。その後、コードを次のように修正しました。
command = (char *) malloc (strlen(new_command) + 1);
これも機能しますが、修正する前になぜ機能したのか、正確には何をしていたのかを理解したいと思います。
編集:実際には...コマンドで省略されたコードに割り当てられ、データが保存されていました。command と new_command の両方にメモリが割り当てられ、free を呼び出す前にデータが格納されていました。これらは他の関数で割り当てられました。1 つは最初に読み込まれたファイルからのもので、もう 1 つは TCP ソケット接続を介して受信されました。プログラムは、クライアントからのコマンドを、ファイルからのパスを含む現在の正確な実行可能ファイルと照合し、そのコマンドを呼び出します。何が起こったのか、そしてmallocへの間違った呼び出し(サイズの代わりにポインターを渡す)でまったく機能しなかった理由とは何の関係もないと思ったので、最初からすべてを残しました。