2

free()を使用してメモリを割り当てると、関数に問題が発生しますmalloc()

プログラムを実行すると、セグメンテーション違反が発生します。そして、プログラムのコアダンプを生成します。gdb を使用すると、free() の呼び出しで segfault が表示されます。

この私のコード:

char * temp_filename;
temp_filename = (char *) malloc(50);
temp_filename = strrchr(package->_local_filename, '/');
strcat(package->_cache_filename, temp_filename);
free(temp_filename);

私は自分の間違いを理解することができません。誰かが私の間違いを見つけるのを手伝ってくれますか? ありがとう *コードのエラーについては申し訳ありませんが、これで問題ありません*

4

3 に答える 3

3

割り当てられたポインターを、検索している他の文字列へのポインターで上書きします。

temp_filename = (char *) malloc(50);
temp_filename = strrchr(package->_local_filename, '/');

そして、そのポインターは によって返されるポインターではないため、誤って解放しますmalloc()

free(temp_filename);

修正するには、割り当てと解放を行うコードを削除します。

char * temp_filename;
temp_filename = strrchr(package->_local_filename, '/');
strcat(package->_cache_filename, temp_filename);
于 2013-06-26T19:48:03.487 に答える
2

問題は、temp_filenameを使用して割り当てられたメモリを指していないことmalloc()です。代わりに、へのポインターが含まれていますpackage->_local_filename

temp_filename = strrchr(package->_local_filename, '/');

malloc()andの呼び出しfree()は不要なので削除できます。

于 2013-06-26T19:48:01.017 に答える