gpt4 book ai didi

c - memmove 导致堆大小不断增加并最终终止

转载 作者:行者123 更新时间:2023-11-30 15:33:34 28 4
gpt4 key购买 nike

我正在尝试读取和处理二进制文件。由于其编写方式,我以字符数组的形式读取它。当我处理完数据后。我将剩余数据移至字符缓冲区的开头以避免缓冲区溢出。我正在为此使用 memmove,但这似乎会导致堆增长,这表明我的内存利用率不断增加,直到进程被终止。我试图实现的是一个循环数组,这样我就不必使用太多内存。

char readDat[5000000];
char* readBuf = readDat;
while(reading file)
{
processData(readBuf);
memmove(readBuf, readBuf + processedSize, totalSize - processedSize);
}

由于其他依赖项,我想仅使用字符数组来完成此操作,而不是使用队列或列表等其他结构。

最佳答案

memmove 不分配内存。这意味着:

  1. 您移动的内存超出了预期,并覆盖了堆管理代码用于计算堆大小的指针和大小。这将是一个非常幸运的机会,但也许可以查看相关变量的值并仔细检查它们。

  2. 错误在其他地方,可能在 processData() 中,甚至在您向我们展示的代码之外。

关于c - memmove 导致堆大小不断增加并最终终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23624846/

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