我有表格的类定义
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 *成员一起使用-显然不会失败。