封装free函数遇到的问题

封装free函数遇到的问题,第1张

做单片机项目的时候 有一个需求要把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/25832

void 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、不是原来动态分配禅哪空间的首地址

具体情况还得看看代码才行


欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/yw/12240146.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-22
下一篇2023-05-22

发表评论

登录后才能评论

评论列表(0条)

    保存