引用第2楼dream46于2007-11-23 13:40发表的 :lz你的程序在newp=(char *)&highresult 就有错阿
引用第1楼yinx于2007-11-23 13:39发表的 :newp是malloc出来的空间的头指针,不是可以随意改变它的值的。改变了它的值再free也是没有任何意义的,那个申请的空间还占着内存。至于加了newp=NULL;之后不出错是因为free函数对传入的参数作了检查,如果NULL不作处理而直接退出。.......
引用第3楼dream46于2007-11-23 13:41发表的 : newp++; 改变了原有的指针式不行的
typedef struct mblock { unsigned char isavailable; void *pmem;};void free(void *pmemblock) { if (free != NULL) { //会将 isavailable 设为 1(OR 0????) }}
引用第10楼依然随意于2007-11-24 10:45发表的 :我感觉这程序存在内存泄漏,newp=(unsigned char *)malloc(4*sizeof(unsigned long));这条语句分了存储区,然后newp=(char *)&highresult;结果newp又指向了highresult这个静态的变量,如果后面直接free(newp)就相当于释放静态存储区,那是不可能的,所以要newp=NULL。
引用第11楼zhd32于2007-11-24 11:46发表的 :GG说的是对的LZ问的是为什么会出错,内存泄露在这里不会出错
引用第9楼zhd32于2007-11-23 21:41发表的 :free利用了一个结构体(不同的实现可能不一样啊,但是肯定是在内存中标记了这块内存是否被free了)[code]typedef struct mblock { unsigned char isavailable; void *pmem;.......
引用第13楼abcd0106于2007-11-24 20:18发表的 :想问一下怎么弄到c库函数源码的。。