我正在使用fread
在C++中讀取字符串,其中我正在閱讀並將shortSiteText
存儲在siteNames_中。 siteNames_被聲明爲std::vector<char*> siteNames_;
我在其他函數中使用siteNames_,但因爲shortSiteText
是一個指針,所以當我調用它的delete命令時,siteNames_
中的最後一項被改變。我如何防止這種情況?防止char *向量中的最後一個元素髮生變化
for (unsigned int i = 0; i <= nSites; i ++){
fread((char *) &shortSiteTextLength, 1, sizeof shortSiteTextLength, baseFile_);
shortSiteText = new char[shortSiteTextLength];
fread(shortSiteText,1, shortSiteTextLength,baseFile_);
siteNames_.push_back(shortSiteText);
}
delete [] shortSiteText;
我試圖使用引用操作:siteNames_.push_back(*shortSiteText);
但生成編譯器錯誤。
注意:由於遺留代碼,我必須使用fread和char *。
爲什麼不使用'std :: string'?任何時候,如果你在你的代碼中有'delete',很可能會改進一些東西。 – GManNickG 2010-10-18 21:03:42
@GMan,我在別處使用遺留代碼 – Elpezmuerto 2010-10-18 21:04:12
這就是'c_str' /'data' /'&s [0]'的用途。如果這不適合你,請改用'std :: vector'和'&v [0]'。 **你不應該手動刪除一些東西。**你的整個問題是因爲所有權不明確,因爲你試圖把它交到你自己的手中。這是不安全和錯誤纏身。 –
GManNickG
2010-10-18 21:05:26