建議使用 Visual Studio 2017

C6308

 

如需 Visual Studio 2017 的最新文件請參閱 Visual Studio 2017 文件

警告 C6308: 'realloc' 可能傳回 null 指標: 指派了 null 指標給 <變數> (做為引數傳遞至 'realloc'),會造成原始記憶體區塊遺漏

這則警告指出因為不正確地使用了重新配置函式,而使得記憶體遺漏。 如果重新配置並未成功,則堆積 (Heap) 重新配置函式不會釋放所傳遞的緩衝區。 若要更正此缺失,請將重新配置函式的結果指派給暫存的指標,然後在重新配置成功之後,再取代原來的指標。

下列範例程式碼會產生這則警告:

#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++ Standard Template Library (STL) 提供的機制。 其中包括 shared_ptrunique_ptrvector。 如需詳細資訊,請參閱智慧型指標C++ Standard Library

C6014

顯示: