strcpy
null ターミネータ文字 '\0'
を追加します .スペースを割り当てるのを忘れました:
*filename = (char*)realloc(*filename, strlen(*collection_name)*sizeof(char)+5);
5 文字のスペースを追加する必要があります:".tde"
の場合は 4 サフィックス、および '\0'
用にもう 1 つ ターミネーター。現在のコードでは 4 つしか割り当てられないため、最後の書き込みは、新しいファイル名に割り当てたブロックの直後のスペース (つまり、その後の 0 バイト) に行われます。
注: あなたのコードには共通の問題があります - realloc
の結果を代入します 再割り当てされるポインターに直接。 realloc
の場合はこれで問題ありません 成功しますが、失敗するとメモリ リークが発生します。このエラーを修正するには、realloc
の結果を保存する必要があります 別の変数で、NULL
をチェックします。 値を *filename
に戻す前に :
char *tmp = (char*)realloc(*filename, strlen(*collection_name)*sizeof(char)+5);
if (tmp != NULL) {
*filename = tmp;
} else {
// Do something about the failed allocation
}
*filename
に直接割り当てる ポインタが *filename
であるため、メモリ リークが発生します。 以下を指していたものは、失敗すると上書きされ、回復不能になります。
Ubuntu - Python Couchbase lib をインストールしようとしています - libcouchbase/couchbase.h:No such file or directory
bashスクリプトでlftpを使用してファイルを転送する