
做单片机项目的时候 有一个需求要把C库的free函数封装一下 形如MMFree这样的名字 这样就可以在里面添加调试信息以便输出 可是 唉 我想简单了 我这样设计的
[cpp]
void MXFreeP(void* p)
{
free(p)
p = NULL
}
int main(int argc char** argv)
{
char* p = NULL
p = (char*)拿猛锋malloc( )
知此 if(NULL != p)
{
*p = x
}
MXFreeP(p)
if(NULL == p)
{
printf( p == NULL\n )
}
else
{
printf( p != NULL\n ) //运行后 输出这个
}
system( pause )
return
}
结果 系统崩溃了 回来之后我在PC上照这样写了一下 虽然程序没有崩溃 不过指针指向的内容没有被释放 我想起了以前遇到的指针作为函数参数的问题 明白了 得传二维指针啊
修改后
[cpp]
void MXFreePP(void** p)
{
free(*p)
*p = NULL
}
int main(int argc char** argv)
{
char* p = NULL
p = (char*)malloc( )
if(NULL != p)
{
*p = x
}
MXFreePP((void**)&p)
if(NULL == p)
{
printf( p == NULL\n ) //运行后输出这个
}
else
{
printf( p != NULL\n )
}
system( pause )
return
}
终于得到期望的结果了 不过要使用这个函数的话 还必须得到指针的二维指针 麻烦啊 如果在函数内部取的话 又因为是值拷贝 取得的二维指针不消晌是原来的二维指针 我想了很久 还是用宏吧
[cpp]
#define MXFreePP(p) free((void*(p))) \
printf( I have been freed \n )
lishixinzhi/Article/program/Java/hx/201311/25832void rearin()
{
lianbiao *p
p=(lianbiao*)malloc(sizeof(lianbiao*))这袭磨个有问题.
改成这样p=(lianbiao*)malloc(sizeof(lianbiao)).
下面的删除你改成这样基禅悉看看 我没调试。
if(a==NULL) printf("no\n")
else{
if(b == a)//就多加这一个IF
{top = a->next
free(a)
return
}
while(b->next!=a)
b=b->next
a=a->next
free(b->next) //没错,就是此处有问题
b->搏乎next=a
如果是编译错误,则表明没有包括头文件cstdlib如果是运行错误,则表示兆李free函数参数的指针值有错误,主要如下:
1、指向目标并不是可以释放的空族袭迟间
2、指向目标已经释放过了,现在重复释放
3、指针值为0
4、不是原来动态分配禅哪空间的首地址
具体情况还得看看代码才行
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)