【问题标题】:Arithmetic Pointer and fstream C++算术指针和 fstream C++
【发布时间】:2012-07-09 17:31:03
【问题描述】:

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

代码:

    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。

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

有人可以帮助我吗?

【问题讨论】:

    标签: c++ pointers stream


    【解决方案1】:
    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
    

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

    【讨论】:

    • 您的意思是“使用方括号”吗?尖括号看起来像这样&lt;&gt;。这些[] 是方括号。
    猜你喜欢
    • 1970-01-01
    • 2012-07-27
    • 1970-01-01
    • 2010-10-20
    • 1970-01-01
    • 2013-12-10
    • 2020-07-22
    相关资源
    最近更新 更多