0

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

代码:

    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。

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

有人可以帮助我吗?

4

1 回答 1

8
OutBuffer = new char(BufferSize);

这只会为 ONE char 分配内存,并且这个 char 被初始化BufferSize如果BufferSize对于char.

你的意思可能是这样的:

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

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


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

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

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

于 2012-07-09T17:32:08.523 回答