You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

查询memcpy等函数无效/空指针为UB的C++标准依据

memcpy、memset、memmove空/无效指针(含count=0)的未定义行为标准依据

核心结论

即使count为0,传递空指针或无效指针给memcpy、memset或memmove的行为仍属于未定义行为(UB),以下是C++标准草案N4860中的对应条款依据:


1. memcpy的规定

来自N4860第20.5.1.2节memcpy函数:
效果:从src指向的对象复制count个字节到dest指向的对象。每个对象都应是可平凡复制的类型。
前置条件:dest和src应指向可访问的对象。
备注:如果dest和src重叠,则行为未定义。

这里的前置条件明确要求dest和src必须指向可访问的对象——空指针或无效指针显然不满足这一要求,无论count是否为0,违反前置条件即触发未定义行为。

2. memmove的规定

来自N4860第20.5.1.3节memmove函数:
效果:从src指向的对象复制count个字节到dest指向的对象。每个对象都应是可平凡复制的类型。复制发生时,仿佛先将字节复制到一个临时数组,再从临时数组复制到目标对象。
前置条件:dest和src应指向可访问的对象。

同样,前置条件要求指针指向可访问对象,空/无效指针违反该条件,行为未定义,与count值无关。

3. memset的规定

来自N4860第20.5.1.4节memset函数:
效果:将dest指向的对象的前count个字节设置为value(转换为unsigned char)。
前置条件:dest应指向可访问的对象。

memset的前置条件明确要求dest指向可访问对象,空指针或无效指针不满足该要求,无论count是否为0,行为均为未定义。


内容的提问来源于stack exchange,提问作者Senua

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 14:45:58