непонятки с realloc
От: loggik  
Дата: 13.09.11 08:39
Оценка: :)))
Всем привет.
Есть такой код

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 должен сохранять данные, увеличивая размер в конце массива. где тут могут быть ошибки?
Спасибо.
Re: непонятки с realloc
От: watch-maker  
Дата: 13.09.11 08:43
Оценка:
Здравствуйте, loggik, Вы писали:
L>realloc(pBuf, BufBlockLen * 2);

pBuf = (BYTE *)realloc(pBuf, BufBlockLen * 2)
Re[2]: непонятки с realloc
От: loggik  
Дата: 13.09.11 08:48
Оценка:
Здравствуйте, watch-maker, Вы писали:

WM>Здравствуйте, loggik, Вы писали:

WM>
L>>realloc(pBuf, BufBlockLen * 2);
WM>

WM>
WM>pBuf = (BYTE *)realloc(pBuf, BufBlockLen * 2)
WM>



а спасибо, дошло.
Re[2]: непонятки с realloc
От: k.o. Россия  
Дата: 13.09.11 15:17
Оценка: +1
Здравствуйте, 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)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.