当我尝试使用包含另一个向量的向量进行迭代时,我发现了一些困难。我有一个头文件,它定义了这样的结构: 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。”
有人知道我做错了什么吗?
答案 0 :(得分:2)
您似乎试图使用malloc()
来超越系统。请放心,系统会回复你!如果您不使用new
,则不会自动构建对象,您将遭受各种各样的悲伤。在C ++中,malloc()
基本上也没有位置! C内存函数有时用作内存分配工具的一部分,并且可能在连接遗留代码时,但在任何情况下都不足以malloc()
C ++对象。