這是很牽強的,但下面的代碼「安全」(即保證不會造成分段錯誤):正在訪問std :: vector :: reserve safe之後的原始指針嗎?
std::vector<int> vec(1); // Ensures that &vec[0] is valid
vec.reserve(100);
memset(&vec[0], 0x123, sizeof(int)*100); // Safe?
我意識到,這是醜陋的 - 我只是想知道,如果它是技術上安全, 不漂亮」。我想它唯一的用法可能是忽略存儲在給定索引之外的值。
注意! How can I get the address of the buffer allocated by vector::reserve()?涵蓋了相同的主題,但我更感興趣,如果這是安全並且如果有這樣做的陷阱。
編輯:原始代碼是錯的,用memset
代替原來的memcpy
。
好吧,這是如此醜陋,它傷害。你爲什麼這樣做?如果你真的需要,你不能簡單地使用一個數組嗎?在這個例子中,100是固定的,所以你可以在堆棧上使用數組而不需要刪除[] ing ... – Francesco
「分段錯誤」是一個特定於平臺的事件。 C++語言沒有描述它是什麼。該語言只是說明是否定義了某些東西,如果是,則說明是做什麼的。 –
我已經低估了這個問題,並不是因爲我認爲這是一個糟糕的問題,而是因爲你沒有花足夠的時間來確保你所問的是你想問的問題(原始代碼和當前版本中的代碼是相當的不同)。-2個代表點並不多,但應該提醒你在將來稍微小心點,因爲當你問別人花時間回答試圖幫助的時候,如果你稍後再重新提出問題,那麼這段時間會被浪費掉上。 –