gpt4 book ai didi

c++ - Realloc 返回空值?

转载 作者:太空宇宙 更新时间:2023-11-04 04:07:03 25 4
gpt4 key购买 nike

我用 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 );

编辑:已修复。我正在为我的类重载 << 运算符,并让它返回 *this 而不是 void。不知何故,这把一切都搞砸了!如果有人能解释为什么会发生这种情况,那就太好了!

最佳答案

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

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

if I replace sizeAllocated with a constant that is same value, it reallocs correctly

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

关于c++ - Realloc 返回空值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4788975/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com