我对C标准不是很精通,所以请您多多包涵。
我想知道标准是否保证memcpy(0,0,0)
是安全的。
我能找到的唯一限制是,如果内存区域重叠,则行为是未定义的……
但是我们可以认为内存区域在这里是重叠的吗?
发布于 2014-07-12 13:32:12
只是为了好玩,gcc-4.9的发行说明指出它的优化器使用了这些规则,例如可以删除
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)有时是对这些标准的一个有用的扩展。
发布于 2019-01-11 04:04:08
不,memcpy(0,0,0)
不安全。标准库很可能不会在该调用中失败。然而,在测试环境中,memcpy()中可能存在一些额外的代码来检测缓冲区溢出和其他问题。而这个特殊版本的memcpy()对空指针的反应还没有定义。
https://stackoverflow.com/questions/5243012
复制相似问题