阁龙1427 发表于 2016-11-1 16:16:28

一起来分析一下malloc

本帖最后由 阁龙1427 于 2016-11-1 16:17 编辑


这是一个有趣的问题。最近在不经意把0值传给了函数malloc,得到了一个合法的指针之后,才想到这个问题。这就是如下代码,该代码的输出是“Got a valid pointer”。讨论这样的一问题得到正确的答案固然重要,但解决问题的方法和你做决定的基本原理更重要些。




char *ptr;
if ((ptr = (char *)malloc(0)) ==
NULL)
{
puts("Got a null pointer");
}
else
puts("Got a valid pointer");


重赏

无符号整形 发表于 2016-11-1 16:54:16

malloc只是返回一个起始地址,所以没有问题。
malloc会找一个长度为size的连续的空间并且分配它,最后返回他的起始地址
传0就是分配一个连续长度为0的内存空间并且返回他的起始地址,也就是没有分配,只是返回起始地址
复制字符串时strcpy/strncpy/wcscpy会接受首地址,然后把字符串的第1个字符放到分配的起始地址,第2个字符串放到分配的起始地址+1,以此类推,直到碰到'\0'或者达到拷贝字符数上限制为止。
现实中不应该这样做,因为那个连续0字节为空的指针可能指向其他数据,进行字符串拷贝会覆盖他们。
页: [1]
查看完整版本: 一起来分析一下malloc