malloc的行为(0)

svK*_*ris 8 c pointers

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段:

如果请求的空间大小为零,则行为是实现定义的:返回空指针,或者行为就像大小是非零值一样,但返回的指针不应用于访问对象.

  • ..只要你这样做一次. (2认同)