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>代替
使用malloc
。+1表示一个问得很好的问题() new