我正在使用内存缓冲区写入文件。我将每条记录复制到内存缓冲区,然后将其刷新到磁盘。
码:
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
也就是说,与分配相比,首选初始化。
关于c++ - 算术指针和fstream C++,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11400101/