C++ 为什么我会得到一个;访问冲突读取位置“;这个代码有错误吗?

C++ 为什么我会得到一个;访问冲突读取位置“;这个代码有错误吗?,c++,C++,有人能告诉我为什么用这个代码示例获得“访问冲突读取位置”吗?我怎样才能解决这个问题 #include <vector> using namespace std; struct StructTest; struct Struct1; typedef struct Struct1{ StructTest* test; } Struct1; typedef struct StructTest{ vector<Struct1*> test123; } Struc

有人能告诉我为什么用这个代码示例获得“访问冲突读取位置”吗?我怎样才能解决这个问题

#include <vector>
using namespace std;
struct StructTest;
struct Struct1;
typedef struct Struct1{
    StructTest* test;
} Struct1;

typedef struct StructTest{
    vector<Struct1*> test123;
} StructTest;

static StructTest* abc;

int test(){
    abc = (StructTest*) malloc(sizeof(StructTest));;
    Struct1* a1 = (Struct1*) malloc(sizeof(Struct1));
    a1->test = abc;
    abc->test123.push_back(a1);
    return 0;
}

int main(){
    test();
    return 0;
}
#包括
使用名称空间std;
结构测试;
结构1;
类型定义结构1{
结构测试*测试;
}结构1;
类型定义结构测试{
向量test123;
}结构测试;
静态结构测试*abc;
int测试(){
abc=(StructTest*)malloc(sizeof(StructTest));;
Struct1*a1=(Struct1*)malloc(sizeof(Struct1));
a1->测试=abc;
abc->test123.向后推(a1);
返回0;
}
int main(){
test();
返回0;
}

它在这条线上崩溃了:

abc->test123.push_back(a1);

原因是您使用
malloc
将其分配到上面两行。因此,
test123
的内容未初始化。因此,当您在其上调用
push_back
时,它会崩溃。

您没有创建
test123
。使用
new
而不是
malloc
分配结构,这将为您创建
test123

abc = new StructTest;
Struct1* a1 = new Struct1;
记得用
delete
处理,而不是
free


实际上,由于您正在使用C++,您应该停止使用<代码> Malc .< /P> < P>不要使用MALOC,使用新的。malloc不会导致调用构造函数,因此在这种情况下,向量不是有效的对象。

因为,当使用“malloc”分配块时,它可能包含垃圾、零或其他内容

对象<代码> TEST123是C++对象,其构造函数尚未执行。尝试改用操作员

new


也可以,在C++中,不必使用代码> TyPufF谢谢您的快速回复,那么我如何修复这个问题?使用<代码>新结构测试< /COD>代替MalOC(SIEZOF(StuttTest))< />代码>。同样的情况也适用于另一个

malloc
使用
new
。+1表示一个问得很好的问题()