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);
}
Run Code Online (Sandbox Code Playgroud)
在编译上面的代码并运行它时,程序能够读取字符串,即使我们为指针p分配了一个0字节的内存.
声明中究竟发生了p = (char* ) malloc(0)什么?
Alo*_*ave 12
它是实现定义的malloc()将返回但是使用该指针是未定义的行为.未定义的行为意味着任何事情都可以从程序工作中发生,而不会出现故障,所有安全的投注都是关闭的.
C99标准:
7.22.3内存管理功能
第1段:
如果请求的空间大小为零,则行为是实现定义的:返回空指针,或者行为就像大小是非零值一样,但返回的指针不应用于访问对象.