关于C的calloc和free的问题

qqcjw 2011-10-15 10:57:58
我碰到以下问题,求解答

char *mechs, *mech, *c;
ret = gsasl_server_mechlist(ctx->gsasl_ctx, &mechs);

free(mechs); 这个会报错..

这mechs片内存是一个libgsasl.dll 的分配的.代码以下
list = calloc (n_mechs + 1, GSASL_MAX_MECHANISM_SIZE + 1);

我的问题是不同Dll 中 calloc 与 free 会有问题?.我想同一地址空间应该没有问题吧...
...全文
411 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
pastorale 2014-05-04
  • 打赏
  • 举报
回复
free改成gsasl_free
qqcjw 2011-10-15
  • 打赏
  • 举报
回复
苦等中..没有答案.决不结贴.免得误人误己!
qqcjw 2011-10-15
  • 打赏
  • 举报
回复
to qq120848369:
检查了.必不为NULL .数据是:
ANONYMOUS EXTERNAL LOGIN PLAIN SECURID DIGEST-MD5 CRAM-MD5 SCRAM-SHA-1
qqcjw 2011-10-15
  • 打赏
  • 举报
回复
to seucs:
其实这些是Jabberd2的源码..源码是就是调用函数方释放.. 其实我试不Free.跑完这个函数.再看这个内存一样是没有释放..

to xinshirn:
错误为windows 内存泄漏 经典提示:
Windows 已在 router.exe 中触发一个断点。
其原因可能是堆被损坏,这说明 router.exe 或它所加载的任何 DLL 中有 Bug。
原因也可能是用户在 router.exe 具有焦点时按下了 F12。
free之前我有看过是否是空值的..分配是成功..
谢谢你们的关注.
qq120848369 2011-10-15
  • 打赏
  • 举报
回复
char *mechs, *mech, *c;
ret = gsasl_server_mechlist(ctx->gsasl_ctx, &mechs); //检查过ret了么?
free(mechs); //没检查ret你怎么知道mechs是否为NULL呢?

另外,mechs是否++,--过?

再另外,人们都说dll里有分配接口,就应该在dll里再提供释放接口,难道dll里木有提供么?
qqcjw 2011-10-15
  • 打赏
  • 举报
回复
另外libgsasl.dll 是我自己用VC8编译的.
我用从网上下的libgsasl.dll .不知什么编译器编的.但用它不会报错..但只能在Release下可以..Debug下一样不行.
因为libgsasl是Linux下一个开源项目.在windows下编译是不是要加编译参数.
盼高人帮看看..
http://alpha.gnu.org/gnu/gsasl/
libgsasl 项目地址.

xinshirn 2011-10-15
  • 打赏
  • 举报
回复
你把错误信息贴出来嘛

你可以试试你的calloc是否成功,如果没有成功那也free出错的。

如果calloc成功,你可以试着往你申请的空间写东西,看看会不会出错
seucs 2011-10-15
  • 打赏
  • 举报
回复
会不会在 libgsasl.dll 中的calloc和你的free函数不是同一个链接库的函数?你的libgsasl.dll库提供了相应的free函数么?

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧