我正在编写代码来编写vector
到文件。我的目标是首先将vector
的后半部分写入文件,然后根据偏移量编写前半部分。下面的代码给我分段错误。
std::vector<uint8_t> buffer_(1000); // the vector is filled with values
int offset_ = 300;
std::ofstream output_file (file_name.c_str(), std::ofstream::out | std::ofstream::binary);
if (output_file.is_open()) {
output_file.write(reinterpret_cast<const char*>(&buffer_[offset_]), (buffer_.size() -offset_)*sizeof(uint8_t));
// segmentation fault on the line above
output_file.write(reinterpret_cast<const char*>(&buffer_[0]), (offset_)*sizeof(uint8_t));
}
有人可以告诉我代码有什么问题吗?
答案 0 :(得分:4)
首先将偏移量视为[0-based]数组索引(&buffer_[300]
),然后立即将其视为[1-based]元素计数(buffer_.size()-300
)。这将导致从301 st 元素开始读取700个元素,该元素超过向量的末尾一个元素。
从任一参数中减去一个,取决于你的实际意思是“偏移”。
当你遇到问题时,你应该习惯于在纸上计算出这些基本数学 使用你的调试器也不会受到伤害!
答案 1 :(得分:0)
此问题所寻求的功能已在rotate
和rotate_copy
中实施。作为一般规则,在标准中已经重新实施的行为是浪费的和/或可能充满错误,正如这个问题所证明的那样。
由于 ga('create', 'UX-xxxxxxx-x', 'auto');
ga('set', { page: '/index.html?FaqPage', title: 'Faq'}, { page: '/index.html?MemberPage', title: 'Member'});
ga('send', 'pageview');
仅对其输入迭代器使用ForwardIterator
,因此可以通过简单使用this answer来利用ostreambuf_iterator
。所以这可以完成,而不是问题中的两个写:
rotate_copy