算术指针和流C++



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

代码:

    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初始化,如果BufferSizechar太大,则可能导致溢出。

你的意思可能是:

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

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


这与您的问题无关,但如果可能的话,更喜欢在声明指针时分配内存:

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

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

相关内容

  • 没有找到相关文章

最新更新