首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >是否保证执行memcpy(0,0,0)是安全的?

是否保证执行memcpy(0,0,0)是安全的?
EN

Stack Overflow用户
提问于 2011-03-09 16:17:55
回答 2查看 26.8K关注 0票数 84

我对C标准不是很精通,所以请您多多包涵。

我想知道标准是否保证memcpy(0,0,0)是安全的。

我能找到的唯一限制是,如果内存区域重叠,则行为是未定义的……

但是我们可以认为内存区域在这里是重叠的吗?

EN

回答 2

Stack Overflow用户

发布于 2014-07-12 13:32:12

只是为了好玩,gcc-4.9的发行说明指出它的优化器使用了这些规则,例如可以删除

代码语言:javascript
复制
int copy (int* dest, int* src, size_t nbytes) {
    memmove (dest, src, nbytes);
    if (src != NULL)
        return *src;
    return 0;
}

这在调用copy(0,0,0)时会产生意想不到的结果(参见https://gcc.gnu.org/gcc-4.9/porting_to.html)。

我对gcc-4.9的行为有些矛盾;该行为可能是符合标准的,但是能够调用memmove(0,0,0)有时是对这些标准的一个有用的扩展。

票数 24
EN

Stack Overflow用户

发布于 2019-01-11 04:04:08

不,memcpy(0,0,0)不安全。标准库很可能不会在该调用中失败。然而,在测试环境中,memcpy()中可能存在一些额外的代码来检测缓冲区溢出和其他问题。而这个特殊版本的memcpy()对空指针的反应还没有定义。

票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5243012

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档