c - memcpy 的失败场景

标签 c memcpy

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

最佳答案

memcpy的前提是内存区域不会重叠。您调用undefined behavior如果您违反了该先决条件。

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

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

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

关于c - memcpy 的失败场景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54315464/

相关文章:

C - 使用 htonl 和 ntohl 编码/取消编码结构

改变C中cmd窗口的背景颜色?

c - 代码有什么问题?

c++ - C++ 中的顺序保留 memcpy

c - 了解 C 中的页面复制

c - memcpy 如何与 void 指针一起使用?

C++ is_trivially_copyable 检查

c - 唯一元素 - 结构数组

ios - 非常简单的 C 代码有问题

c - C 语言中的 OpenSSL 1.0.0 RSA 参数