我正在使用内存缓冲区写入一个文件。我将每条记录复制到内存缓冲区,然后将其刷新到磁盘。
代码:
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
对char
太大,则可能导致溢出。
你的意思可能是:
OutBuffer = new char[BufferSize]; //use square brackets!
它为BufferSize
字符分配内存。缓冲区未初始化。
这与您的问题无关,但如果可能的话,更喜欢在声明指针时分配内存:
char * OutBuffer = new char [BufferSize];
char *pt = OutBuffer; //prefer initialization over assignment
也就是说,更喜欢初始化而不是赋值。