我用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 );
}
编辑:已修复。我正在超载<<我班的操作员,让它返回*而不是空。不知怎的,这搞砸了一切!如果有人能解释为什么会这样,那就太好了!
答案 0 :(得分:1)
由于在问题中添加了以下评论
data = (char*)realloc(data, (size_t)(sizeAllocated * sizeof(char)));
如果我用a替换sizeAllocated 它的常数是相同的值 reallocs正确
现在我们可以弄清楚发生了什么。您将sizeAllocated替换为DID不具有相同值的常量。出于调试目的,添加一个将输出sizeAllocated值的语句,您会感到惊讶。