为什么指针内存能够成功地从void内存分配中保存和检索数据

时间:2017-06-28 08:56:27

标签: c malloc sizeof void

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char *p = malloc(sizeof(void));
    p[0] = 'a';
    p[1] = 'b';
    p[2] = 'c';
    p[3] = 'd';
    p[4] = 'e';
    printf("%c\n",p[0]);
    printf("%c\n",p[1]);
    printf("%c\n",p[2]);
    printf("%c\n",p[3]);
    printf("%c\n",p[4]);
    return 0;
}

//在上面的代码中,只应分配一个字节的内存,因为sizeof(void)只是&#39; 1&#39;,但为什么我能成功打印所有字符?

同样对于以下程序也是成功打印

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char *p = malloc(0);
    p[0] = 'a';
    p[1] = 'b';
    p[2] = 'c';
    p[3] = 'd';
    p[4] = 'e';
    printf("%c\n",p[0]);
    printf("%c\n",p[1]);
    printf("%c\n",p[2]);
    printf("%c\n",p[3]);
    printf("%c\n",p[4]);
    return 0;
}

请说明为什么这两种情况都成功打印了msg,即使没有为此分配内存?

1 个答案:

答案 0 :(得分:0)

您正在利用未定义的行为

在其他情况下,编译器可能会吃掉你的猫。

(可能发生的事情是,C运行时库为您提供的内存比您实际要求的内存更多。)