这是很牵强的,但下面的代码“安全”(即保证不会造成分段错误):正在访问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个代表点并不多,但应该提醒你在将来稍微小心点,因为当你问别人花时间回答试图帮助的时候,如果你稍后再重新提出问题,那么这段时间会被浪费掉上。 –