为什么我的代码出现"访问冲突读取位置"错误?

tan*_*612 5 c++

任何人都可以告诉我为什么我用这个代码示例得到"访问违规阅读位置"?我该如何解决这个问题?

#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;
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*nan 6

你没有创造test123.用new而不是分配结构,malloc这将为test123你创造.

abc = new StructTest;
Struct1* a1 = new Struct1;
Run Code Online (Sandbox Code Playgroud)

记得要处理delete而不是处理free.

事实上,由于您使用的是C++,因此您应该停止使用malloc.


Mys*_*ial 4

它在这条线上崩溃了:

abc->test123.push_back(a1);
Run Code Online (Sandbox Code Playgroud)

原因是因为您使用 分配了上面两行malloc。因此, 的内容test123未初始化。所以当你调用push_back它时它就会崩溃。