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

尤汉·罗斯

所以我面临一个问题-当我的数据超过缓冲区的初始大小,并且在递归函数中进行了重新分配时,由于释放其缓冲区而出现错误。

* malloc:***对象0x100106da0错误:未被分配的指针被分配*

这是代码:

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. realloc返回ed缓冲区recPrint

  2. 用于free返回的值recPrint

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Vulkan中重新分配缓冲区

来自分类Dev

C中的Free()函数在释放重新分配的数据时不会产生任何错误,但不会释放实际内容。可能是什么原因?

来自分类Dev

在ObjectAL中播放缓冲区

来自分类Dev

递归函数中的缓冲区溢出

来自分类Dev

container.clear()是否释放/重新分配内部缓冲区?

来自分类Dev

当我重新分配一个较小的缓冲区时,它会删除缓冲区中的数据直到达到正确的大小吗?

来自分类Dev

Pytorch中的缓冲区是什么?

来自分类Dev

协议缓冲区和Avro中的ZigZag编码背后的原因是什么?

来自分类Dev

webgl中绑定缓冲区的逻辑是什么?

来自分类Dev

nio缓冲区类中limit()的用途是什么

来自分类Dev

试图重新分配内存的堆缓冲区溢出。C语言

来自分类Dev

在Vulkan中重新提交待处理命令缓冲区的用例是什么

来自分类Dev

Windows Store的WASAPI示例,使用指向已释放缓冲区的指针

来自分类Dev

移至上一个目录时,Emacs释放缓冲区重用

来自分类Dev

释放包含动态缓冲区的动态缓冲区中的内存

来自分类Dev

如何在到达缓冲区而不是缓冲区已满时读取缓冲区中的数据?

来自分类Dev

Java-什么时候释放直接缓冲区?

来自分类Dev

如何计算播放缓冲区的上限?

来自分类Dev

如何释放libjpeg创建的缓冲区?

来自分类Dev

在头文件中分配缓冲区的可能性

来自分类Dev

为什么在LZW压缩中压缩缓冲区需要大于输入缓冲区?

来自分类Dev

在协议缓冲区消息中存储二进制数据缓冲区

来自分类Dev

在iOS音频通话APP中使用循环缓冲区的原因是什么?

来自分类Dev

比较缓冲区

来自分类Dev

请求缓冲区

来自分类Dev

缓冲区为空!:无法分配内存

来自分类Dev

如何为createReadStream分配缓冲区

来自分类Dev

协议缓冲区-分配嵌套消息

来自分类Dev

非阻塞或阻塞分配的缓冲区?

Related 相关文章

  1. 1

    如何在Vulkan中重新分配缓冲区

  2. 2

    C中的Free()函数在释放重新分配的数据时不会产生任何错误,但不会释放实际内容。可能是什么原因?

  3. 3

    在ObjectAL中播放缓冲区

  4. 4

    递归函数中的缓冲区溢出

  5. 5

    container.clear()是否释放/重新分配内部缓冲区?

  6. 6

    当我重新分配一个较小的缓冲区时,它会删除缓冲区中的数据直到达到正确的大小吗?

  7. 7

    Pytorch中的缓冲区是什么?

  8. 8

    协议缓冲区和Avro中的ZigZag编码背后的原因是什么?

  9. 9

    webgl中绑定缓冲区的逻辑是什么?

  10. 10

    nio缓冲区类中limit()的用途是什么

  11. 11

    试图重新分配内存的堆缓冲区溢出。C语言

  12. 12

    在Vulkan中重新提交待处理命令缓冲区的用例是什么

  13. 13

    Windows Store的WASAPI示例,使用指向已释放缓冲区的指针

  14. 14

    移至上一个目录时,Emacs释放缓冲区重用

  15. 15

    释放包含动态缓冲区的动态缓冲区中的内存

  16. 16

    如何在到达缓冲区而不是缓冲区已满时读取缓冲区中的数据?

  17. 17

    Java-什么时候释放直接缓冲区?

  18. 18

    如何计算播放缓冲区的上限?

  19. 19

    如何释放libjpeg创建的缓冲区?

  20. 20

    在头文件中分配缓冲区的可能性

  21. 21

    为什么在LZW压缩中压缩缓冲区需要大于输入缓冲区?

  22. 22

    在协议缓冲区消息中存储二进制数据缓冲区

  23. 23

    在iOS音频通话APP中使用循环缓冲区的原因是什么?

  24. 24

    比较缓冲区

  25. 25

    请求缓冲区

  26. 26

    缓冲区为空!:无法分配内存

  27. 27

    如何为createReadStream分配缓冲区

  28. 28

    协议缓冲区-分配嵌套消息

  29. 29

    非阻塞或阻塞分配的缓冲区?

热门标签

归档