GNU/Linux >> Linux の 問題 >  >> Linux

valgrind - アドレス ---- は、割り当てられたサイズ 8 のブロックの後に 0 バイトです

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 であるため、メモリ リークが発生します。 以下を指していたものは、失敗すると上書きされ、回復不能になります。


Linux
  1. 不正なブロックサイズの例外– CKR_ENCRYPTED_DATA_LEN_RANGE [SoftHSM]

  2. LsとHexdumpがファイルサイズについて意見が一致しないのはなぜですか?

  3. LinuxサーバーでIPアドレスをブロックする

  1. WindowsServerでIPアドレスをブロックする

  2. シェルでファイルサイズ(バイト単位)を取得するポータブルな方法は?

  3. ls -l の後の最初の行の合計は?

  1. long int のサイズが常に 4 バイトであると想定できますか?

  2. 仮想アドレス空間でページサイズはどのように決定されますか?

  3. 切断後にMACアドレスが変更されないようにする方法は?