“应用程序在堆缓冲区结束后写入内存” - Cpp

时间:2016-01-22 14:53:22

标签: c++ bittorrent

我试图使用Cpp删除函数中的缓冲区, 到目前为止,这是我的代码:

void GetPiece(int size)
{
    //std::cout << "Downloading File Index: " + currFileIndex <<  " More: " + pieceSize - size;
    char * newBuffer = new char[size];
    bitRequest->RecvBySize(newBuffer, size - 4, 5);
    //newBuffer += 8;
    File file("work_torrent.mp3");
    file.WriteToFile(newBuffer + 8, size - 4);
    file.Close();



    pieceSize -= size -4;
    std::cout << "Downloading File Index: " << currFileIndex << " More: " << pieceSize << std::endl;

    if (pieceSize <= 0)
    {
        currFileIndex++;
        pieceSize = pieces.at(currFileIndex).fileSize;
    }

    offset += size - 4;

    if (pieceSize > 16384)
    {
        if (1048576 - offset < 16384)
        {
            requestSize = 1048576 - offset;
            if (requestSize == 0)
            {
                offset = 0;
                currPieceIndex++;
                if (pieceSize > 16384)
                {
                    requestSize = 16384;
                }
                else {
                    requestSize = pieceSize;
                }
            }
        }
        else {
            requestSize = 16384;
        }

    }
    else {
        requestSize = pieceSize;
    }



    bitRequest->RequestPiece(currPieceIndex, offset, requestSize);


    delete[] newBuffer; // Here it throws the error


}

错误:

enter image description here

只有当我试图从memmorry中释放char数组时才会出现,有人知道它为什么会出错?

当删除行不存在时,经过一段时间我调用该函数后,由于失败分配导致程序崩溃。

0 个答案:

没有答案