2013-08-04 146 views
1

我想在Ubuntu 12.10下使用G ++运行此代码。大对象导致分段错误

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 
    }; 

什么问题?我该如何解决它?

编辑: 在你需要看到整个代码和测试数据的情况下,两者都是avaible这里:http://vietlabs.com/crf-sl/

+1

段错误发生在哪里?很难从您发布的代码中猜出任何东西(除了“错误地使用其中一个结构指针”)。 – JBL

+2

看起来段错误不是由您在此处发布的代码引起的,更多信息是必需的 –

+0

我已调试过代码行,在这行代码它发生。你需要什么其他的信息? – Moh

回答

0

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

NodeFeature *feature_all; 
0

你试图动态地分配数据的周围4 GB。 我希望它会崩溃,欲了解更多信息,请参阅此链接。 The limited allocation size 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

+0

您是说代码占用大量空间,并且没有任何操作可以完成? 你可以在你的机器上运行它吗? – Moh

+0

有一种方式,但我不知道如何实现这一点。是的,我已经在VS2010中运行了它,并且在上述功能中遇到了崩溃。 –

+0

初始化该变量,如果请求的内存大小在我的程序范围内,它应该可以工作。 –