我在定義爲vector<pair<char *, int> > data;
的類中有一個私有屬性。我通過data.push_back(make_pair(p, r));
向此矢量添加數據。後來,當我從矢量中獲取數據時,我得到了p值的錯誤數據。返回的數據就像��U3
。我認爲這是因爲指向char數組的指針正在被存儲。我將如何去存儲矢量中的實際副本。如果它有助於char數組永遠不會超過255個字符+ 1的空終止。C++在對的向量中存儲字符串的副本
回答
它看起來好像你有一個指向p(在當時定義的)放置在棧上的指針。一旦堆棧框架彈出,你仍然有指針,但它指向的內存可能是垃圾。這些搖晃的指針問題可能會讓人討厭,所以我建議使用#include <string>
中定義的std :: string類來存儲字符串數據。
不一定與堆棧有任何關係。 – Potatoswatter 2010-10-10 07:12:27
@Potatoswatter:沒錯,沒有代碼我不能確定地說,但這只是猜測我認爲是可能的。 – shuttle87 2010-10-10 07:21:58
使用char*
的任何真正原因?使用std::string
,這會讓你的問題消失。
由於STL基於複製和值語義,因此如果整個字符串(不僅是指向它的指針)存儲在容器中(這裏是vector
),則更容易。我說「更容易」,因爲可以將指針保存在STL容器中,但是指向的內存必須由用戶代碼管理。從這個問題看來,這似乎還沒有完成。
所以,也許你可以使用string
代替char *
,對於如:
typedef std::pair< std::string, int > MyPair;
std::vector<MyPair> data;
如果您有正在處理的裸指針一vector<pair<char *, int> >
和需要手動管理你的字符串的壽命。這是一個重大PITA和它很可能,你做錯了什麼(尤其如此,因爲你甚至沒有要求這樣做的權利,這似乎在暗示你甚至不知道你有做這個)。
與其他人一樣,我建議您改用vector<pair<std::string, int> >
。
你通過分配堆棧變量字符串,並保存它的地址是什麼?當您從您的分配函數返回這將導致您所描述的問題。
更好地分配在堆上(使用new運算符)的字符串,然後將其存儲在堆中分配的地址。例如
char* pNext = new char[50];
strcpy(pNext, ...);
data.push_back(make_pair(pNext, r));
你必須用char數組完成所有你自己的工作 - 例如,你必須確保他們是空終止,或當你去打印出來你就會有意想不到的輸出結果。
例如
pNext[49] = '\0';
另外請記住,當你與一個堆分配字符串後,必須刪除它們。字符*的因而刪除:
delete [] pNext;
正如其他人所說,還有其他的string實現,這將導致你少頭疼。
最容易使用的可能是CString,但會招致包括MFC的實現或ATL的實現它的開銷。 std :: string的,正如別人提到的是另一種選擇。
希望這有助於!
- 1. 將提取的字符存儲在字符串向量中
- 2. 如何在C++中將生成的字符串存儲在向量中?
- 3. 將C++字符串存儲到char *向量中
- 4. (c/C++)在文本部分做字符串文本共享內存的副本?
- 5. C#:執行存儲在字符串變量中的函數
- 6. 執行存儲在字符串變量中的c#語句
- 7. 存儲在指向C中多個字符串的指針數組中的單個字符串存在問題
- 8. C++字符串成員變量不存在於向量中
- 9. 在字符串中存儲字符串
- 10. 分割錯誤:核心轉儲C++向量對字符串:
- 11. 字符串常量存儲
- 12. 在向量中存儲字符串有seg故障
- 13. C++中的字符串向量消耗的內存
- 14. 分割字符串與空間向量的字符串在C
- 15. 如何將字符串文字存儲在內存中的c + +?
- 16. C#在可訪問變量中存儲字符串,int,字符串
- 17. 打印存儲在字符串中的通用字符(html)C++
- 18. 從向量C++中找到字符串中的字符串/字符串
- 19. 對象到字符串和副本Versa
- 20. 存儲在向量所有字符串粘貼到一個字符串,這對於每個字符串向量列表中的
- 21. php刪除字符串中的副本
- 22. COBOL副本中的字符串長度
- 23. 存儲在內存中的字符串常量在哪裏?
- 24. C++:向量列表的高效副本
- 25. 多個字符串存儲在不同的變量C++
- 26. C#將字符串變量存儲爲文本文件.txt
- 27. Python:在字符串中添加字符的副本
- 28. 在一個變量中存儲大量不同的字符串
- 29. 在文本文件中存儲字符串變量
- 30. 隱藏在STL向量中的副本?
你能向我們展示如何分配添加到向量對中的字符串嗎? – 2010-10-10 07:26:25