p.m*_*aes 0 c++ pointers stream
我正在使用内存缓冲区写入文件.我将每个记录复制到内存缓冲区,然后将其刷新到磁盘.
码:
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;
}
Run Code Online (Sandbox Code Playgroud)
当我调用"FileSortHandle-> write(OutBuffer,BufferSize);" VS显示:
"Windows在STL_Test2.exe中触发了一个断点.
这可能是由于堆的损坏,这表明STL_Test2.exe或其加载的任何DLL中存在错误.
这也可能是由于用户在STL_Test2.exe具有焦点时按下F12.
输出窗口可能包含更多诊断信息."
有人能帮帮我吗?
OutBuffer = new char(BufferSize);
Run Code Online (Sandbox Code Playgroud)
这只为一个char分配内存,并且这个char被初始化,BufferSize如果BufferSize太大,可能会导致溢出char.
你可能的意思是:
OutBuffer = new char[BufferSize]; //use square brackets!
Run Code Online (Sandbox Code Playgroud)
它为BufferSize字符分配内存.缓冲区未初始化.
它与您的问题无关,但如果可能,请在声明指针时分配内存:
char * OutBuffer = new char [BufferSize];
char *pt = OutBuffer; //prefer initialization over assignment
Run Code Online (Sandbox Code Playgroud)
也就是说,更喜欢初始化而非分配.