2015-07-12 69 views
1

當我嘗試設置類對象的數據時,出現訪問衝突讀取位置。當我嘗試設置shared_ptr的值時,爲什麼我會訪問違反閱讀位置<T>元素

void make_heap_array() 
{ 
    //Example of ptr_arr is define: It's define in class variables: vector<shared_ptr<Data_Node<Item>>> ptr_arr; 

    int total_data = arr_data.size(); 

    for (int i = 0; i < total_data; i++) 
    { 
     shared_ptr<Data_Node<Item>> new_node = shared_ptr<Data_Node<Item>>(); 
     Item data = arr_data[i]; 
     new_node->set_data(data); //Error: Access violation reading location 
     ptr_arr.push_back(new_node); 

    } 
} 

Data_Node是使用模板,一些方法類,這裏是它的代碼:

template <class Item> 
class Data_Node 
{ 
    Item info; 
public: 
    const Item& data() const 
    { 
     return info; 
    } 
    void set_data(const Item& new_data) 
    { 
     info = new_data; 
    } 
}; 

回答

1

new_node爲空(因爲你很可能已經檢查自己),所以new_node->set_data(data)是未定義行爲。 (共享指針的默認構造狀態爲空。)

+0

你知道我該如何解決這個問題嗎? – Gaurav

+0

@Gaurav:修復什麼?我不知道你的目標是什麼。也許構造一個持有對象的共享指針,例如與'make_shared'? –

+0

好吧,我試圖讓Data_Node對象是shared_ptr。 – Gaurav

相關問題