Realloc返回null?

时间:2011-01-25 01:01:42

标签: c++ c memory malloc realloc

我用malloc分配了一些内存 - 大约128个字节。

稍后,我用大约200个字节调用realloc,但它返回null!

如果我有空,它会返回一个有效的指针,然后是另一个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 );

}

编辑:已修复。我正在超载<<我班的操作员,让它返回*而不是空。不知怎的,这搞砸了一切!如果有人能解释为什么会这样,那就太好了!

1 个答案:

答案 0 :(得分:1)

由于在问题中添加了以下评论

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

如果我用a替换sizeAllocated   它的常数是相同的值   reallocs正确

现在我们可以弄清楚发生了什么。您将sizeAllocated替换为DID不具有相同值的常量。出于调试目的,添加一个将输出sizeAllocated值的语句,您会感到惊讶。