![](/img/trans.png)
[英]Create a pointer(?) to a struct, residing in a <vector> c++
[英]Pointer to vector in a struct C++
我遇到了一些崩潰,因為我在結構中使用了一個可能必須使用大約 6000 個元素的向量。 這是我的結構:
struct Students
{
char* names;
std::vector<int> scores;
};
有沒有辦法讓我的向量不會導致我的結構導致錯誤。 這是我的調用代碼。
while(scores.hasNext())
{
students[current_student].scores.push_back(grade);
}
我的問題:如果這是結構內向量的大小分配問題,我可以聲明一個指向向量的指針並尊重我的向量,而不是將它實際放在結構中嗎?
Grades 只是 integer。
你讓我想起了這里有人遇到過的類似問題。 由於沒有為您的代碼的 rest 提供足夠的信息,我只是在這里猜測一下。
顯然students
是一個結構Students
的數組。 假設它是在堆上分配的,如果您使用malloc
執行此操作,它將無法正常工作,因為malloc 不會正確初始化結構中的成員。 特別是,這里的scores
是一個非 POD object,它需要通過調用其構造函數來正確構造。
// the member in your structure is not initialized
students = (struct Students*) malloc(10 * sizeof(Students));
// oops.. scores is not initialized
students[0].scores.push_back(100);
要解決它,您需要調用new
。 它將通過調用其構造函數來正確初始化成員。
// ok
students = new Students[10];
如果您在這一行中從vector
的代碼中得到一些錯誤
students[current_student].scores.push_back(grade);
這並不意味着問題出在向量上。 這意味着您訪問了無效的 memory (未初始化或未分配)。 可能current_student
超出了students
的范圍,或者您通過調用malloc
而不是new
來分配students
。
如果您不提供更多代碼,就無法回答您的問題。
首先,您不應該將struct
視為需要特殊預防措施的奇怪事物。 它們相當於 class
然后,如評論中所述,您應該添加真正的代碼,因為如果您真的這樣做:
while(scores.hasNext())
{
students[current_student].scores.push_back(grade);
}
那么你將繼續向你的向量添加元素(如果hasNext()
聽起來像它的話),直到你得到一個std::bad_alloc()
最后,不要擔心向量的大小: std::vector
基本上已經是指向堆中向量的指針。 無論向量變得多么“胖”,您的結構都將保持“小”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.