gpt4 book ai didi

在递归函数中重新分配缓冲区后,无法释放缓冲区的数据。可能是什么原因?

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

所以我遇到了一个问题 - 当我的数据超过缓冲区的初始大小并且我在递归函数内进行重新分配时,我会收到释放缓冲区的错误消息。

*malloc: *** error for object 0x100106da0: pointer being freed was not allocated*

代码如下:

void recPrint(FILE *file, char *buffer, int realBufferSize, int bufferSize, char *freeCh, NodePtr* temp){

//some code here...

int *intArr = temp -> usedIndices;
int i = 0;
for(i = 0; i < 36; i++){
if(intArr[i] == 1){
if(i > 9){
*freeCh = i - 10 + 'a' ;
}else{
*freeCh = i + '0';
}
realBufferSize++;
if (realBufferSize >= bufferSize){
buffer = realloc(buffer, (bufferSize + 100) * sizeof(char)); // <<--- REALLOC here
bufferSize += 100;
}
freeCh++;
recPrint(file, buffer, realBufferSize, bufferSize, freeCh, &temp -> children[i]);

//now we need to remove all extra characters till the next turn
freeCh--;
*freeCh = '\0';
}
}

}

void printTrie(FILE *file, char *initialPath){

initPath = initialPath;
if(root.isParent == 0) return;
char *buffer;
char *freeCh;
int *intArr = root.usedIndices;
int bufferSize = 10;
int realBufferSize = 1000;

int i = 0;

for(i = 0; i < 36; i++){
buffer = calloc(1001, sizeof(char));
freeCh = buffer;

if(intArr[i] == 1){
if(i > 9){
*freeCh = i - 10 + 'a' ;
}else{
*freeCh = i + '0';
}

freeCh++;
realBufferSize++;
recPrint(file, buffer, realBufferSize, bufferSize, freeCh, &root.children[i]);
free(buffer); //<<--- getting error here
}
}
}

最佳答案

@WhozCraig 的评论指出了问题所在。这是建议的修复。

  1. recPrint 返回 realloced 缓冲区。

  2. recPrint的返回值使用free

char* recPrint(FILE *file, char *buffer, int realBufferSize,
int bufferSize, char *freeCh, NodePtr* temp){

....

// where you recurse...
buffer = recPrint(file, buffer, realBufferSize,
bufferSize, freeCh, &temp -> children[i]);

// and always return the *current* buffer pointer back to the caller.
return buffer;
}

printTrie 中:

    buffer = recPrint(file, buffer, realBufferSize, bufferSize, freeCh, &root.children[i]);
free(buffer);

关于在递归函数中重新分配缓冲区后,无法释放缓冲区的数据。可能是什么原因?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26432536/

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