算术指针和fstream C++

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.

输出窗口可能包含更多诊断信息."

有人能帮帮我吗?

Naw*_*waz 8

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)

也就是说,更喜欢初始化而非分配.