首页 > 解决方案 > memcpy 的失败场景

问题描述

我试图了解调用 memcpy 可能会静默失败的场景,因为无效的指针会导致访问冲突/段错误。此外,在指针重叠的情况下也会出现问题。除了这些,还有其他方法 memcpy 调用会失败吗?或者我们可以认为它会一直通过而没有任何错误。如何验证?

标签: cmemcpy

解决方案


前提是memcpy内存区域不会重叠。如果您违反该前提条件,您将调用未定义的行为。

同样,如果您读取超出源缓冲区的边界或写入超出目标缓冲区的边界,也会调用未定义的行为。这是标准中规定的。

当您调用未定义的行为时,您无法预测程序将来(甚至过去)的行为方式。它可能会崩溃,它可能会输出奇怪的结果,或者它可能看起来正常工作。

使用 valgrind 之类的工具非常有助于识别程序何时违反各种内存限制,例如读取或写入超出缓冲区末尾、使用未初始化的值、取消引用空指针或执行双重释放。


推荐阅读