Visual studio 收缩动态数组中存在警告 C6308

Visual studio warning C6308 exist in shrinking dynamic array

为什么我在收缩数组时收到警告?
没有任何方法可以丢失指针值。

警告 C6308 'realloc' 可能 return 空指针:将空指针分配给 'arr_all_guests',作为参数传递给 'realloc',将导致原始内存块被泄露。

arr_all_guests = (char**)realloc(arr_all_guests,--(*guest_counter) * sizeof(char*));

意思是说函数realloc可以return一个空指针。在这种情况下,将丢失对所有早期分配内存的访问

arr_all_guests = (char**)realloc(arr_all_guests,--(*guest_counter) * sizeof(char*)); 

因为原来的指针arr_all_guests会被重新赋值一个空指针

你需要使用一个临时指针作为例子

char **tmp = realloc(arr_all_guests, ( *guest_counter - 1 ) * sizeof(char*)); 
if ( tmp != NULL ) 
{
    arr_all_guests = tmp;
    --*guest_counter;
}