1

我正在尝试使用 G++ 在 Ubuntu 12.10 下运行此代码。

NodeFeature *feature_all;    
NODE_NO = 20449;    
feature_all = new NodeFeature[NODE_NO];

我得到消息Segmentation FaultNodeFeature是一个结构:

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/

4

2 回答 2

0

声明为什么类型feature_all
它应该是:

NodeFeature *feature_all;
于 2013-08-04T13:05:39.917 回答
0

您正在尝试4 GB动态分配数据。我预计它会崩溃,有关更多信息,请参阅此链接。有限的分配大小 C++

发生这种情况是因为成员SeqFeature::OB_F_MAX未初始化(结果是负值),并且该值被分配给SeqClassifier::OB_F_SIZE,用于在函数SeqClassifier::initParam中进行计算,在该函数中将其转换为巨大的正值,并给出为动态创建double数组的大小。

简单来说,未初始化的值OB_F_MAX导致size数组的 具有巨大的正值。这个巨大的正值传递给new操作员,导致大小约为 4 GB。

另外,请注意,在 32 位 x86 系统上,您无法请求4 GB甚至无法请求3 GB上述链接所指出的内存。

于 2013-08-04T13:39:24.953 回答