2014-10-26 124 views
1

在我的頭文件中,我將這個向量定義爲一個指針。如何給*向量添加一個值?

private: 
    vector<filteredPoint_t> *filteredValues; 

在我的cpp文件我想filterPoint_t加(結構)的實例,這個矢量。它編譯。

filteredPoint_t fp; 
fp.filteredValue = 3.4; 
fp.globalIndex = 3; 
filteredValues->push_back(fp); 

然而,當我運行它,它立刻filteredValues->push_back(fp)調用後停止。顯示甚至沒有prinf控制檯輸出。儘管在控制檯上沒有錯誤消息。

缺少什麼我在這裏?

一些背景信息:我需要將filteredValues傳遞給多個線程。這樣每個線程都可以寫回這個變量。所以我想我會使用一個指針變量來做到這一點。

+0

你初始化該指針的東西? – 2014-10-26 14:38:35

+2

你分配矢量嗎?另外,你說你想從多個線程使用它,你有適當的鎖定嗎? – JustSid 2014-10-26 14:38:53

回答

3

您需要首先分配內存(可能是構造函數),或者指向有效vector<filteredPoint_t>地址:

filteredValues = new vector<filteredPoint_t>() ; 

然後你可以用它來push_back

此外,還要確保你去分配在析構函數

delete [] filteredValues ; 
+0

感謝您的快速回答。作爲C++的新手,我忘記了分配。 – feder 2014-10-26 20:01:21

3

這是一個指針使用new分配的內存,這意味着它必須指向一些有效的才能被使用:

vector<filteredPoint_t> *filteredValues; 

如果你不這樣做,你將解引用未初始化的指針並調用未定義的行爲。

初始化裝置之一:

  • 具有它指向東西有效(即已經存在的載體)

    filteredValues = &existingVectorOfTheSameType; 
    
  • 創建自己一個新的堆載體,例如

    filteredValues = new vector<filteredPoint_t>(); 
    
+0

感謝您的快速回答。作爲C++的新手,我忘記了分配。 – feder 2014-10-26 20:02:35