我正在尝试使用G ++在Ubuntu 12.10下运行此代码。
NodeFeature *feature_all;
NODE_NO = 20449;
feature_all = new NodeFeature[NODE_NO];
我收到消息Segmentation Fault
。 NodeFeature
是一个结构:
struct NodeFeature
{
int len; //length of vector
double *val; //vector of observational features
int *index; //vetor of indexes of features
int *label_start; //array indexes of the starting point for each label
int *label; //the labels being activated at this node
};
有什么问题?我该如何解决?
编辑: 如果您需要查看整个代码和数据来测试它,可以在这里找到:http://vietlabs.com/crf-sl/
答案 0 :(得分:0)
feature_all
声称为什么类型?
它应该是:
NodeFeature *feature_all;
答案 1 :(得分:0)
您正在尝试动态分配 4 GB
数据。
我希望它会崩溃,有关更多信息,请参阅此链接。The limited allocation size C++
正在发生这种情况,因为成员SeqFeature::OB_F_MAX
未被初始化(结果是负值),并且此值被分配给SeqClassifier::OB_F_SIZE
,用于函数{{}中的计算它被转换为巨大的正值,并以动态创建SeqClassifier::initParam
数组的大小给出。
简单来说,double
的未初始化值导致数组的OB_F_MAX
具有巨大的正值。
这个巨大正值传递给size
运算符,导致大小约为4 GB。
另请注意,在32位x86系统上,您无法请求上述链接所指示的new
甚至4 GB
内存。