当我尝试使用内部包含另一个 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/