使用 boost 重叠 memcpy 中的源块和目标块
谁能解释一下为什么在 c++ 简单代码 valgrind 返回 这个。
第一个问题是 boost:regex。当我使用带问号的子模式(用于可选匹配)时,valgrind 将返回:
memcpy 中的源和目标重叠(第 8 行)
第二个问题是 std::string::erase。
我不知道我做错了什么。
Can anyone explain me why on that c++ simple code valgrind returns this.
First problem is with boost:regex. When i use subpattern with a question mark (for optional matching) valgrind will return:
Source and destination overlap in memcpy (line 8)
Second problem is with std::string::erase.
I have no idea what am i doing wrong.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
看起来库代码正在使用
memcpy
,而为了严格可移植,它应该使用memmove
。对于编译器的库,例如 std::string,这可能没问题,因为该代码不必移植到其他编译器,并且可以使用有关特定实现如何工作的知识。
有了 boost 库,您可能必须相信它们也知道自己在做什么。该库有许多针对不同编译器的配置,并且可能还使用特定的 g++ 扩展。
Seems like the library code is using
memcpy
when, to be strictly portable, it should be usingmemmove
.For the compiler's library, like std::string, this is probably ok as that code doesn't have to be portable to other compilers, and can use knowledge about how the specific implementation works.
With the boost library, you will probably have to trust that they also know what they are doing. The library has a lot of configurations for different compilers and might also use a specific g++ extension.