2012-04-21 72 views
1

在C++中創建無符號列表的向量。對於指針,我很無能,但我想我需要將向量聲明爲持有指向列表的指針。C++ noob獲取seg錯誤

這只是一場災難。如果它編譯完成,我會得到seg故障。

我事先並不知道矢量的大小,直到我得到一個文件來讀取(它應該在第一行),並且我不知道列表將會有多大,直到我通過文件。

關於如何聲明列表向量的任何想法?我想,一旦我知道了,我就可以找出其餘的(好吧,也許不會,但我會更接近)。謝謝。

+4

'vector >'會是一個很好的出發點。你可以編寫這個程序(或者至少是你在這裏描述的部分),而不必在你的代碼中使用任何指針。 – 2012-04-21 03:30:43

+0

像'@JamesMcNellis說的那樣,將'list's''vector''設爲'unsigned int''應該沒問題。如果這確實是代碼的問題部分,那很可能是因爲您正在訪問越界範圍(例如,通過使用運算符[]超過向量長度的末尾)。 – tmpearce 2012-04-21 03:52:46

+0

在這種情況下,使用'at'代替可以向你保證。 – chris 2012-04-21 03:54:51

回答

2
  • 使用調試器來跟蹤崩潰的位置。

  • 永遠不要生成原始指針的向量;只有當你絕對必須有一個指針向量時才使用智能指針。

  • 向量爲您執行內存管理和調整大小。

    vector<list<TYPE> > vecOfLists; //empty
    vecOfLists.push_back (some_list); //add new list onto the back

如果你在地方普通陣列的使用列表,你可以使用向量的載體,而不是變得更好。

+0

我剛到家,我喜歡這些答案,雖然我還沒有嘗試過。對於vecOfLists,第二行添加一個空列表,但我不會預先知道文件中的每個條目是否需要新列表或添加到我剛剛創建的列表中,所以我認爲這不會起作用。至少我不知道如何讓它工作......嗯。 – punstress 2012-04-21 05:04:27

+1

如果你需要一個新的列表,使用'vecOfLists.push_back(the_new_list);'。如果你需要添加到一個,使用'vecOfLists [index_of_list_to_add_onto] .push_back(additional_element);' – chris 2012-04-21 05:08:14

+0

也許我可以循環n次,併爲每個n(我會知道在文件的頂部)創建一個空列表,然後通過添加到正確列表的文件。文件的每一行都會有一個初始值,告訴我列表的索引以將行的其餘部分放入。可能有多行具有相同索引。我只需要計算如何訪問該列表...如果一個條目是「index addx」,它會是像vecOfLists [index] .push_back(addx)? – punstress 2012-04-21 05:13:20