我正在尝试调试为Linux编写的旧代码。有时,应用程序获取一个segfault,当它达到了以下方法的memcpy调用:将阵列复制到Linux中的矢量时出现segfault
std::vector<uint8> _storage;
size_t _wpos;
void append(const uint8 *src, size_t cnt)
{
if (!cnt)
return;
if (_storage.size() < _wpos + cnt)
_storage.resize(_wpos + cnt);
memcpy(&_storage[_wpos], src, cnt);
_wpos += cnt;
}
的值如下:
_storage.size() is 1000
_wpos is 0
*src points to an array of uint8 with 3 values: { 3, 110, 20 }
cnt is 3
我不知道为什么会这样,因为这种方法被调用数千在应用程序的运行时期间,但它有时会出现段错误。
任何人有任何想法如何解决这个问题?
你可以。该标准保证&vec [0]是矢量的连续内存存储的开始。矢量的其他成员将存储在&vec [0]到&vec [vec.size() - 1]范围之外。 – 2009-12-16 06:34:10
除了真正的问题之外:以下划线开头的标识符保留给您的编译器/实现。 – xtofl 2009-12-16 08:12:19
线程。可以从不同的线程访问_storage,_wpos和append()吗?如果是这样,则需要同步。 – atzz 2009-12-16 08:19:03