明白了,之前就是不知道malloc的时候已经存下内存空间大小的信息。就一直认为free应该要指定free内存的大小。至于为什么认为free是宏是这么想的,如果有某函数V_free(void *p,size_t n),后面参数n指定了free的内存空间大小那就#define free(p) V_free(p,sizeof(*p))当然这种想法很幼稚。不过穆扬说我搞不清楚函数和宏的关系倒真是冤枉我了