首页 文章

HEAP CORRUPTION DETECTED:正常阻塞后... CRT检测到应用程序在堆缓冲区结束后转入内存

提问于
浏览
0

当我运行此代码时,我在 Headers 中收到错误,这是一个精确的屏幕截图:

enter image description here

我的代码是这样的:

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&)
    {

    }
}

1 回答

  • 3

    buffer[valread] = '\0'; 正在尝试访问不存在的 buffer 元素 . 因此程序行为未定义 .

    如果您使用了 data.at(valread) ,则会按照C 11标准的要求抛出 std::exception (并在您的 catch 网站截获) .

    还要考虑使用 std::string+ 重载进行所有连接 . 如果你这样做,你的代码将更具可读性 . 对 newBuffer (具有自动存储持续时间)也使用 std::string 类型 . 您始终可以使用 c_str() 以只读方式访问内部数据缓冲区 .

相关问题