int main()
{
char *p;
p = (char* ) malloc(sizeof(char) * 0);
printf("Hello Enter the data without spaces :\n");
scanf("%s",p);
printf("The entered string is %s\n",p);
//puts(p);
}
编译并运行上面的代码后,即使我们为指针 p 分配了 0 字节内存,程序也能够读取该字符串。
声明中实际发生了什么p = (char* ) malloc(0)
?
它是实现定义的malloc()
将返回,但使用该指针是未定义的行为。未定义的行为意味着从程序正常运行到崩溃,任何事情都可能发生,所有安全的赌注都消失了。
C99标准:
7.22.3 内存管理函数
Para 1:
如果请求的空间大小为零,则行为是实现定义的:返回空指针,或者行为就像大小是某个非零值,但返回的指针不得用于访问对象。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)