使用 boost 重叠 memcpy 中的源块和目标块

发布于 2024-11-18 06:19:25 字数 321 浏览 3 评论 0原文

谁能解释一下为什么在 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

遮了一弯 2024-11-25 06:19:25

看起来库代码正在使用 memcpy,而为了严格可移植,它应该使用 memmove

对于编译器的库,例如 std::string,这可能没问题,因为该代码不必移植到其他编译器,并且可以使用有关特定实现如何工作的知识。

有了 boost 库,您可能必须相信它们也知道自己在做什么。该库有许多针对不同编译器的配置,并且可能还使用特定的 g++ 扩展。

Seems like the library code is using memcpy when, to be strictly portable, it should be using memmove.

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文