我有表格的类定义

class X
{
  public:
     //class functions
  private:
      A_type *A;
      //other class variables
};


并且将struct A_type定义为

struct A_type
{
  string s1,s2,s3;
};


在构造函数内部,我为A分配了适当的内存,然后尝试A [0] .s1 =“ somestring”;
显示分段错误。
这种声明是无效的,还是我遗漏了一些东西

编辑:OP中的新代码已从注释中移出[neilb]

#include <stdio.h>
#include <math.h>
#include <string>
#include <iostream>
using namespace std;

struct HMMStruct { string a; };

HMMStruct *HMMs;

int main() {
    HMMs=(HMMStruct*)malloc(sizeof(HMMStruct)*2);
    HMMs[0].a="sdfasasdsdfg";
    cout << HMMs[0].a << endl;
}

最佳答案

为什么不:

class X
{
  public:
     //class functions
  private:
      A_type a;
};


换句话说,为什么要动态分配A_type实例?

编辑:您发布的新代码的问题是它使用malloc()。如果使用malloc(),则不会调用构造函数,这对于非POD类型(如字符串)必不可少。您不应该在C ++程序中使用malloc-应该使用new分配所有内容,这将正确调用构造函数:

HMMs= new HMMStruct[2];


而且您的代码实际上并不能与char *成员一起使用-显然不会失败。

09-04 18:17