我正在尝试调试为 Linux 编写的遗留代码。有时应用程序在到达以下方法中的 memcpy 调用时会出现段错误:
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
我不知道为什么会发生这种情况,因为此方法在应用程序运行时被调用了数千次,但有时会出现段错误。
有人知道如何解决这个问题吗?
最佳答案
就写入的数据而言,您的代码看起来不错。您绝对确定您传递的是正确的 src
指针吗?当您使用诸如 gdb 之类的调试器运行代码时会发生什么?它应该在段错误处停止,然后您可以打印出 _storage.size()
、src
和 cnt
的值。
我相信您会发现(至少)其中一个与您的预期完全不同。您可能传递了无效的 src
;您可能传递了一个大得离谱的 cnt
。
关于c++ - 在 Linux 中将数组复制到 vector 时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1912693/