将项目push_back到向量中包含的向量时出现未处理的异常

时间:2013-11-16 23:46:43

标签: c++ vector

当我尝试使用包含另一个向量的向量进行迭代时,我发现了一些困难。我有一个头文件,它定义了这样的结构:     typedef struct Set {         char varname [32];         void * value;     设置;

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

std::vector<Setup *> TestCase;

在cpp中,我有一个只读取xml文件并将readen值解析为TestCase向量的函数,如下所示:

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-&gt; SetVar.push_back(newSet);”行中崩溃。它抛出一个未处理的异常说: “ISORC2014_CaseStudy_d.exe中0x0430d7ba(tcmodule_psttm_isorc2014_d.pyd)处理未处理的异常:0xC0000005:访问冲突读取位置0xcdcdcdc1。”

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

1 个答案:

答案 0 :(得分:2)

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