2013-08-04 175 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

初始化該變量,如果請求的內存大小在我的程序範圍內,它應該可以工作。 –