Realloc возвращает ноль? - PullRequest
       35

Realloc возвращает ноль?

1 голос
/ 25 января 2011

Я выделяю память с помощью malloc - около 128 байт.

Позже я вызываю realloc с 200 байтами, но он возвращает ноль!

Возвращает действительный указатель, если я освобождаю, и затем другой malloc, однако я хотел бы использовать realloc.

Чем можно объяснить это поведение (у меня явно не хватает памяти)? Это правильное поведение?

Кодовые биты:

//class constructor
size = 0;

sizeAllocated = DEFAULT_BUFFER_SIZE; //64

data = (char*)malloc(sizeAllocated * sizeof(char)); //data is valid ptr now, I've checked it

data[0] = '\0';

//later on:
//append function
bool append(char** data, const char* str, size_t strLen) {
  if((size + strLen) >= sizeAllocated) {
     sizeAllocated += strLen + 1 + BUFFER_ALLOCATION_STEP;
     char* temp = realloc(*data, sizeAllocated * sizeof(char));
     if(temp)
        *data = temp;

     return( temp != NULL );

}

РЕДАКТИРОВАТЬ: исправлено. Я перегружал оператор << для своего класса, и он возвращал * this вместо void. Каким-то образом это все испортило! Если бы кто-нибудь мог объяснить, почему это произошло, было бы неплохо! </strong>

1 Ответ

1 голос
/ 25 января 2011

Поскольку следующий комментарий был добавлен к вопросу

data = (char*)realloc(data, (size_t)(sizeAllocated * sizeof(char)));

, если я заменю sizeAllocated на константу с тем же значением, он правильно перераспределяет

могу понять, что случилось.Вы заменили sizeAllocated на константу, которая НЕ имеет одинакового значения.В целях отладки добавьте оператор, который выведет значение sizeAllocated, и вы будете удивлены.

...