这个malloc应该不起作用

Ant*_*rto 1 c malloc

这是我的代码.

 int     main()
  {
  char *s;
  int i = 0;

  printf("%lu \n", sizeof(s));

  s = malloc(sizeof(char) * 2);

  printf("%lu \n", sizeof(s));
  /*Why is this working?*/
  while (i <= 5)
    {
      s[i] = 'l';
      i++;
    }
  printf("%s \n", s);

  printf("%lu \n", sizeof(char));

  printf("%lu \n", sizeof(s[0]));
  }
Run Code Online (Sandbox Code Playgroud)

在我看来,这应该是段错误,因为我试图写的比我分配的更多.这为什么有效?

Ed *_* S. 6

在我看来,这应该是段错误,因为我试图写的比我分配的更多.这为什么有效?

它不是"有效"; 您的代码调用未定义的行为."未定义的行为"并不意味着"您的代码会出现段错误".这将是定义的行为.UB意味着任何事情都会发生.

在这种情况下,你正在踩踏你不拥有的记忆.这有时会出现段错误,但不要指望它.C没有来自您的操作系统的"段错误"概念.