malloc函数

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef struct  {
 char s[16];
} PString;

void main() {
  PString *p;
  int n = 8;
  p = (PString *) malloc(n * sizeof(PString));
  int i = 0;
  for(; i < 16; i++) {
    p->s[i] = 'a' + i;
  }
  printf("%s", p->s);
  free(p);

}


这段程序中分配得到8个PString结构的内存。奇怪的是,在gdb调试的时候即使是"p sizeof(*(p+5000))",还是会得到正确的数字,而且p *(p+5000)也可以访问。

在程序中即使添加"(p+10)->s[0] = 'a'"也是正确的,就是说可以访问超过分配得到的空间的内容。  为什么呢?




你可能感兴趣的:(malloc函数)