gpt4 book ai didi

c++ - 算术指针和 fstream C++

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

我正在使用内存缓冲区写入文件。我将每条记录复制到内存缓冲区,然后将其刷新到磁盘。

代码:

    char * OutBuffer;
char *pt;
OutBuffer = new char(BufferSize);
pt = OutBuffer;

for (int i=0; i<(FileSize / RECORD_SIZE); i++){
if (((i % recordsPerBlock)==0) && (i>0)){
FileSortHandle->write(OutBuffer, BufferSize);
pt = OutBuffer;
}
else{
memcpy(pt, minRecord, RECORD_SIZE);
pt = pt + RECORD_SIZE;
}
minRecord = nullptr;
}

当我调用“FileSortHandle->write(OutBuffer, BufferSize);”时VS 显示:

“Windows 已在 STL_Test2.exe 中触发断点。

这可能是由于堆损坏,这表明 STL_Test2.exe 或它加载的任何 DLL 中存在错误。

这也可能是由于用户在 STL_Test2.exe 具有焦点时按了 F12。

输出窗口可能有更多的诊断信息。"

有谁能帮帮我吗?

最佳答案

OutBuffer = new char(BufferSize);

这只为一个字符分配内存,并且这个字符是用BufferSize初始化的,如果BufferSize太大,可能会导致溢出字符.

你的意思可能是这样的:

OutBuffer = new char[BufferSize]; //use square brackets!

它为 BufferSize 个字符分配内存。缓冲区未初始化。


这与您的问题无关,但如果可能,最好在声明指针时分配内存:

char * OutBuffer = new char [BufferSize];
char *pt = OutBuffer; //prefer initialization over assignment

也就是说,更喜欢初始化而不是赋值。

关于c++ - 算术指针和 fstream C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11400101/

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