我试图在另一个struct中动态分配一个struct数组 这是代码段
我没有得到任何语法错误,但是一旦我尝试输入str1
,我就会出现分段错误有人可以解释为什么会出现分段错误,以及在这种情况下动态分配在内存中会发生什么
struct A {
string str1;
string str2;
}
struct B {
int count;
A* A_array;
}
void GetB (B** b)
{
*b = (B*) malloc(1*sizeof(B));
cout << "Enter count";
cin >> (**b).count;
(**b).A_array = (A*) malloc((**b).count*sizeof(A));
cout << "Enter str1";
cin >> (**b).A_array[0].str1;
cout << "Enter str2";
cin >> (**b).A_array[0].str2;
}
int main(){
B* b;
GetB(&b);
}
答案 0 :(得分:6)
您遇到崩溃的原因是string str1;
string str2;
无法正确构建。
它们构造不正确,因为malloc
只分配内存而不调用构造函数。
C ++中的操作符new
是什么。
因此,正如评论中所强调的那样:
malloc
来分配非POD对象。malloc
。std::vector
代替答案 1 :(得分:1)
扩展我的评论,这将相当于你当前的程序使用一些更惯用的C ++。我故意保持结构尽可能接近你的原始结构,但当然还有其他需要考虑的问题,比如你的课程是否应该有建设者或私人成员。
struct A {
string str1;
string str2;
};
struct B {
int count;
vector<A> A_vec;
};
B GetB ()
{
B myB;
cout << "Enter count";
cin >> myB.count;
A a;
cout << "Enter str1";
cin >> a.str1;
cout << "Enter str2";
cin >> a.str2;
myB.A_vec.push_back(a);
return myB;
}
int main(){
B b(GetB());
}