我正在尝试读取和处理二进制文件。由于它的编写方式,我在char数组中读取它。我处理完数据后。我将剩余的数据移动到char缓冲区的开头,以避免缓冲区溢出。我正在使用memmove,但这似乎导致堆增长,这表明我的内存利用率增加,直到进程被终止。我想要实现的是一个圆形阵列,这样我就不必使用太多的内存。
char readDat[5000000];
char* readBuf = readDat;
while(reading file)
{
processData(readBuf);
memmove(readBuf, readBuf + processedSize, totalSize - processedSize);
}
由于其他依赖关系,我想仅使用char数组而不是使用其他结构(如队列或列表)。
答案 0 :(得分:1)
memmove
不分配内存。这意味着:
您移动的内存超出预期,并覆盖堆管理代码用于计算堆大小的指针和大小。这将是一次非常幸运的罢工,但可能会查看所涉及变量的值并仔细检查它们。
错误发生在其他地方,可能在processData()
中,甚至在您向我们展示的代码之外。