1

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

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

如果我做free,它会返回一个有效的指针,然后是另一个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。不知何故,这把一切都搞砸了!如果有人能解释为什么会发生这种情况,那就太好了!

4

1 回答 1

1

由于以下评论已添加到问题中

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

如果我用相同值的常量替换 sizeAllocated,它会正确重新分配

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

于 2011-01-25T01:19:33.323 回答