次の方法で共有


C6308

警告 C6308: 'realloc' は null ポインターを返す可能性があります: null ポインターを、引数として 'realloc' へ渡された <変数> に割り当てると、元のメモリ ブロックにメモリ リークを発生させる原因となります

この警告は、再割り当て関数が不適切に使用された結果としてメモリ リークが発生することを示します。ヒープ再割り当て関数は、再割り当てが失敗した場合は渡されたバッファーを解放しません。問題を修正するには、再割り当て関数の結果を一時変数に代入し、再割り当てが成功した後で元のポインターを置換します。

使用例

この警告が発生するコード例を次に示します。

#include <malloc.h>
#include <windows.h>

void f( )
{
  char *x;
  x = (char *) malloc(10);
  if (x != NULL)
  {
    x = (char *) realloc(x, 512);
    // code...
    free(x);
  }   
}

この警告を解決するには、次のコードを使用します。

#include <malloc.h>
#include <windows.h>

void f()
{
  char *x, *tmp;

  x = (char *) malloc(10);

  if (x != NULL)
  {
    tmp = (char *) realloc(x,512);
    if (tmp != NULL) 
    {
      x = tmp;
    }
    free(x);
  }
}

この警告は、再割り当て関数の結果を割り当てるときに、再割り当てされるバッファーのライブ エイリアスがある場合、音を鳴らすことができます。

これらの問題を完全に回避するには、C++ の標準テンプレート ライブラリ (STL) によって提供される機構を使用します。これには、shared_ptrunique_ptrvector などがあります。詳細については、「スマート ポインター (Modern C++)」および「C++ 標準ライブラリ リファレンス」を参照してください。

参照

関連項目

C6014