c - memcpy 的失败场景
问题描述
我试图了解调用 memcpy 可能会静默失败的场景,因为无效的指针会导致访问冲突/段错误。此外,在指针重叠的情况下也会出现问题。除了这些,还有其他方法 memcpy 调用会失败吗?或者我们可以认为它会一直通过而没有任何错误。如何验证?
解决方案
前提是memcpy
内存区域不会重叠。如果您违反该前提条件,您将调用未定义的行为。
同样,如果您读取超出源缓冲区的边界或写入超出目标缓冲区的边界,也会调用未定义的行为。这是标准中规定的。
当您调用未定义的行为时,您无法预测程序将来(甚至过去)的行为方式。它可能会崩溃,它可能会输出奇怪的结果,或者它可能看起来正常工作。
使用 valgrind 之类的工具非常有助于识别程序何时违反各种内存限制,例如读取或写入超出缓冲区末尾、使用未初始化的值、取消引用空指针或执行双重释放。
推荐阅读
- php - 为什么总是未定义的变量?我已经很紧凑了
- javascript - (已关闭)如何将画布下载为 png?
- iframe - 如果外部 .php 仅可用,则显示 iframe。其他:隐藏它
- android - 使用 Firebase 身份验证的登录用户
- json - 展平任何嵌套的 json 字符串并使用 spark scala 转换为数据帧
- android - 如何编写 android espresso 测试脚本以在溢出菜单视图之外单击
- android - 无法以编程方式将样式应用于 Android Material Component Chip
- reactjs - Material-UI TextField - 在默认文本上呈现文本
- ruby-on-rails - Ruby Bug - POINTER ruby 2.5.3 p105 的分段错误
- node.js - 使用 Node JS 将 Oracle CLOB 划分为多个 JSON