У меня есть функция, которая принимает указатель на буфер и размер этого буфера (через указатель). Если буфер недостаточно большой, он возвращает значение ошибки и устанавливает необходимую длину в выходном параметре:
// FillBuffer is defined in another compilation unit (OBJ file).
// Whole program optimization is off.
int FillBuffer(__int_bcount_opt(*pcb) char *buffer, size_t *pcb);
Я называю это так:
size_t cb = 12;
char *p = (char *)malloc(cb);
if (!p)
return ENOMEM;
int result;
for (;;)
{
result = FillBuffer(p, &cb);
if (result == ENOBUFS)
{
char *q = (char *)realloc(p, cb);
if (!q)
{
free(p);
return ENOMEM;
}
p = q;
}
else
break;
}
Visual C ++ 2010 (с максимальным анализом кода) жалуется на 'warning C6001: Using uninitialized memory 'p': Lines: ...'
. Он сообщает номера строк, охватывающие почти всю функцию.
Visual C ++ 2008 этого не делает. Насколько я могу судить, этот код в порядке. Что мне не хватает? Или чего не хватает VC2010?