c++ - 将项目推回 vector 中包含的 vector 时出现未处理的异常

标签 c++ vector

当我尝试使用内部包含另一个 vector 的 vector 进行迭代时,我发现了一些困难。我有一个头文件,它定义了这样的结构: typedef 结构集{ 字符变量名[32]; 无效*值; } 设置;

typedef struct Setup {
    float instant;
    std::vector<Set *> SetVar;
} Setup;

std::vector<Setup *> TestCase;

在 cpp 中,我有一个简单地读取 xml 文件并将读取值解析为 TestCase vector 的函数,如下所示:

while(SetupHandle.ToElement()){
    Setup * newSetup = (Setup *)malloc(sizeof(Setup));
    str = SetupHandle.ToElement()->Attribute("instant");
    newSetup->instant = atof(str);

    TiXmlHandle SetHandle = SetupHandle.FirstChild("Set");
    i=0;
    while(SetHandle.ToElement()){
        Set * newSet = (Set *)malloc(sizeof(Set));
        str = SetHandle.ToElement()->Attribute("Variable");
        strcpy(newSet->varname, str);
        const char * newstr = SetHandle.ToElement()->Attribute("Value");
        newSet->value = (void *) newstr;
        newSetup->SetVar.push_back(newSet);
        i++;
        SetHandle = SetupHandle.Child("Set", i);
    }

    TestCase.push_back(newSetup);
    index++;
    SetupHandle = TC_top.Child("Setup", index);
}

库可以编译,但是当我使用它时,程序会在“newSetup->SetVar.push_back(newSet);”这一行崩溃。它抛出一个未处理的异常说: “ISORC2014_CaseStudy_d.exe 中 0x0430d7ba (tcmodule_psttm_isorc2014_d.pyd) 处未处理的异常:0xC0000005:访问冲突读取位置 0xcdcdcdc1。”

有人知道我做错了什么吗?

最佳答案

您似乎试图通过使用 malloc() 来超越系统。放心,系统会报复你的!如果您不使用 new,则对象不会自动构建,您将遭受各种痛苦。在 C++ 中,基本上没有 malloc() 的位置! C 内存函数有时用作内存分配设施的一部分,并且可能在连接遗留代码时使用,但在任何情况下都不足以 malloc() C++ 对象。

关于c++ - 将项目推回 vector 中包含的 vector 时出现未处理的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20025377/

相关文章:

c++ - 如何将 flex 词法扫描器生成器用作程序的一部分?

c++ - 调整 vector 大小时出现运行时错误

r - 我如何找到连续的值

c++ - WebP 无损格式概述

r - 如何根据另一行重新排列矩阵,data.frame或vector的行

c++ - 清除 vector 或定义新 vector ,哪个更快

c++ - vector 加法运算

c++ - Is i = (0,++i, 0) 未定义行为

c++ - 如何从其他线程访问QWidget

c++ - 无法使用 const char * 数组实例化模板