运行此代码时,标题中出现错误,下面是确切的屏幕截图:



我的代码是这样的:

string ProcessCommand(vector<unsigned char> data)
{
    try
    {
        int valread = data.size();
        unsigned char* converted = &data[0];
        char *buffer = (char *)converted;
        buffer[valread] = '\0';
        const char file[] = ">myfile.txt";
        char * newBuffer = new char[strlen(buffer) + strlen(file) + 1];
        strcpy(newBuffer, buffer);
        strcat(newBuffer, file);
        system(newBuffer);
        fstream f("myfile.txt", fstream::in);
        string str;
        getline(f, str, '\0');
        //const char * sendfile = str.c_str();
        //char * result;
        //result = const_cast<char *>(sendfile);
        f.close();
        remove("myfile.txt");
        return str;
    }
    catch (const std::exception&)
    {

    }
}

最佳答案

buffer[valread] = '\0';试图访问不存在的buffer元素。因此,程序行为是不确定的。

如果您使用的是data.at(valread),则将按照C ++ 11标准的要求抛出一个std::exception(并在您的catch站点截获)。

还可以考虑对所有串联使用+std::string重载。如果这样做,您的代码将更具可读性。也对std::string使用newBuffer类型(具有自动存储期限)。您始终可以使用c_str()以只读方式访问内部数据缓冲区。

关于c++ - 检测到HEAP损坏:在正常块之后…CRT检测到应用程序在堆缓冲区结束后写入了内存,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42390103/

10-15 05:59