malloc(0) 的行为

2024-04-14

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(使用前将#替换为@)

malloc(0) 的行为 的相关文章

随机推荐