2014-03-03 101 views
7

我不知道爲什麼這個工程:分配一個載體,一個結構矢量場

main.cpp中:

int main(int argc, char * argv[]) { 
    Pwm_Info tf_info; 
    tf_info = get_pwm_info(library_data, motif_name); 
} 

Gen.cpp

 struct Pwm_Info { 
    std::string motif_name; 
    int width; 
    std::vector <double> pwm; 
    Pwm_Info(): motif_name(0), 
    width(0), 
    pwm(0) {} 
} 
TF_info; 

Pwm_Info get_pwm_info(std::string library_data, std::string motif_name) { 
    std::vector <double> double_list; 
    strtk::parse(pwm_block, " \n\r", double_list); 
    std::cout << double_list.size() << std::endl; 

    Pwm_Info TF_info; 

    TF_info.motif_name = motif_name; 
    TF_info.width = n_width; 

    std::vector <double> * pointer; 
    std::vector <double> * pointer2; 

    pointer = & TF_info.pwm; 
    pointer2 = & double_list; * pointer = * pointer2; 
    std::cout << TF_info.pwm[1] << std::endl; 
    TF_info.pwm = double_list; 
    return TF_info; 
} 

以前,我刪除了指向TF_info和雙列表的指針,並且只有行:

TF_info.pwm = double_list; 

...導致SegFault。 創建和分配指針(指針和指針2)到彼此的目的是什麼?

+2

你能提出一個簡單的例子,沒有所有demontsrating問題你library_data,motif_name,Pwm_Info,TF_info等。你能理解閱讀這樣的代碼是不是很困難?! –

+0

您是否保留過印刷線?你提出的修改實際上是完全合法的。 – Paranaix

+2

那麼,如果'std :: cout << TF_info.pwm [1] << std :: endl;'在'TF_info.pwm = double_list;'之前,並且指針部分不在那裏,那當然不會工作('TF_info.pwm'的原始長度:'0'。 – Nabla

回答

2
pointer = &TF_info.pwm; 
pointer2 = &double_list; 
*pointer = *pointer2; 

TF_info.pwm = double_list; 

完全等同!


可能possibily導致段錯誤的唯一路線是:

std::cout << TF_info.pwm[1] << std::endl; 
+0

+1 Thanks Paranaix。這的確是錯誤。 –