Всем привет.
Есть такой код
const int BufBlockLen = 1024 * 10;
BYTE * pBuf = (BYTE *)malloc(BufBlockLen);
pBuf[0] = 65;
pBuf[1] = 66;
pBuf[2] = 67;
realloc(pBuf, BufBlockLen * 2);
после realloc в pBuf в первых трех байтах не ABC, а другие символы, как после malloc. но ведь realloc должен сохранять данные, увеличивая размер в конце массива. где тут могут быть ошибки?
Спасибо.
Здравствуйте, loggik, Вы писали:
L>realloc(pBuf, BufBlockLen * 2);
pBuf = (BYTE *)realloc(pBuf, BufBlockLen * 2)
Здравствуйте, watch-maker, Вы писали:
WM>Здравствуйте, loggik, Вы писали:
WM>L>>realloc(pBuf, BufBlockLen * 2);
WM>
WM>WM>pBuf = (BYTE *)realloc(pBuf, BufBlockLen * 2)
WM>
а спасибо, дошло.
Здравствуйте, watch-maker, Вы писали:
WM>Здравствуйте, loggik, Вы писали:
WM>L>>realloc(pBuf, BufBlockLen * 2);
WM>
WM>WM>pBuf = (BYTE *)realloc(pBuf, BufBlockLen * 2)
WM>
Не надо так делать, это приводит к утечкам памяти если realloc не удалось выделить память большего размера. Правильный код должен быть таким:
BYTE * pNewBuf = (BYTE *)realloc(pBuf, BufBlockLen * 2);
if (pNewBuf == 0)
{
free(pBuf);
// handle memory allocation failure.
}
pBuf = pNewBuf;
Или таким:
pBuf = (BYTE *)reallocf(pBuf, BufBlockLen * 2)