C6308
警告 C6308: 'realloc' 可能傳回 null 指標: 指派 null 指標給 <variable> (其做為引數傳遞至 '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);
}
}
如果在指派重新配置函式的結果時,要重新配置的緩衝區具有實際的別名時,這則警告會產生雜音。