簡體   English   中英

矢量,不良分配

[英]vector of vectors, bad alloc

我有一個名為Contact的類,我想建立一個指向這些對象的指針的數據結構,例如127行20列的矩陣。 我試圖以這種方式使用std :: vector類

std::vector < std::vector<Contact* > > matrix (127, std::vector < Contact* > (20));

然后,在標頭中聲明了以下內容

std::vector<std::vector<Contact* > > Buckets;

我將初始化和聲明過的矩陣分配給它(此步驟是因為基本上我不知道如何以更清晰和簡短的方式完成它):

Buckets = matrix;

但是像這樣使用push_back函數

Buckets[pot].push_back(cont_temp);

一段時間后會產生錯誤(“拋出'std :: bad_alloc'實例后終止調用”),我不知道如何解決。

還有其他更好的方法來實例化和初始化矩陣嗎? 您會建議其他解決方案,而不是使用向量向量(boost :: multiarray ..?)嗎?

謝謝(抱歉這個愚蠢的問題,我是一個可憐的學生:)

編輯 :我發現了錯誤(只是一個任務超出范圍)。 如果您對這種數據結構有一般性建議,我仍在這里...

當您說“一段時間后”是什么意思? std :: bad_alloc意味着您內存不足。 您是否有一個循環吞噬了內存?

矩陣中的聯系人是否動態分配? 如果是這樣,當您說:

Buckets = matrix;

最后,您將獲得兩個指向同一動態分配對象的指針,這只會導致麻煩。 您應該改用智能指針矢量,例如Boost的共享指針。

如果只打算使用已知大小的二維矩陣,則可以使用一個簡單的數組:

(Contact*) matrix[127][20];

當然,如果可以確定大小或在編譯后更改大小,則此方法不起作用。 在這種情況下,我建議您轉向增強庫,尤其是multi_array。

這里的一個簡單的例子還是存在的完整文檔。

typedef boost::multi_array<Contact*, 2> ContactContainer;
ContactContainer matrix(boost::extents[127][20]);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM