我试图了解对 memcpy 的调用可能会默默失败的场景,因为无效的指针将导致访问冲突/段错误。此外,如果指针重叠,也会出现问题。除了这些之外,memcpy 调用还有其他失败的原因吗?或者我们可以认为它会一直通过而不会出现任何错误。如何验证?
最佳答案
memcpy
的前提是内存区域不会重叠。您调用undefined behavior如果您违反了该先决条件。
类似地,如果读取超出源缓冲区的边界或写入超出目标缓冲区的边界,也会调用未定义的行为。这是标准中规定的。
当您调用未定义的行为时,您无法预测程序将来(甚至过去)的行为方式。它可能会崩溃,可能会输出奇怪的结果,或者可能看起来工作正常。
使用 valgrind 等工具非常有助于识别程序何时违反各种内存约束,例如读取或写入超过缓冲区末尾、使用未初始化的值、取消引用空指针或执行双重释放。
关于c - memcpy 的失败场景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54315464/