大量对象导致分段错误

时间:2013-08-04 12:56:30

标签: c++ linux memory g++ segmentation-fault

我正在尝试使用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/

2 个答案:

答案 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内存。