首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >结构指针数组的动态分配

结构指针数组的动态分配
EN

Stack Overflow用户
提问于 2013-03-09 01:19:01
回答 2查看 931关注 0票数 0

我尝试在另一个结构中动态分配一个结构数组,这里是代码段

我没有收到任何语法错误,但一旦我尝试输入str1,就会出现分段错误

有没有人能解释一下为什么会出现分段错误,以及在这种情况下动态分配内存会发生什么情况

代码语言:javascript
代码运行次数:0
运行
复制
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);
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-09 01:25:17

发生崩溃的原因是因为string str1; string str2;没有正确构建。

而且它们没有正确构造,因为malloc只分配内存,而不调用构造函数。

这就是C++中运算符new的作用。

  1. 从不使用malloc来分配非POD对象。
  2. 更好,从不在c++中使用malloc
  3. 更好,从不使用手动分配的数组,而使用std::vector来代替<代码>H213<代码>G214
票数 6
EN

Stack Overflow用户

发布于 2013-03-09 05:16:41

在我的评论的基础上,这将等同于您当前使用一些更常用的C++的程序。我故意让结构尽可能接近你的原始结构,但当然还有其他问题需要考虑,比如你的类应该有构造函数还是私有成员。

代码语言:javascript
代码运行次数:0
运行
复制
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());
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15299698

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档