免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4456 | 回复: 9
打印 上一主题 下一主题

[C] 在动态库分配内存,传给其它模块使用,会有问题吗 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-11-15 22:27 |只看该作者 |倒序浏览
大家好,请教几个问题。

一个项目里有几个模块,有些编成了动态库,
我在动态库里用malloc分配内存,或直接定义个static的变量,把它们的地址传到其它模块使用,会不会有问题?
我每次这样做的时候似乎都会出现一些奇怪的问题,所以怀疑这样做是不是不行的。

顺便问下,如果程序崩溃了,在gdb里用bt命令看不到栈帧了,怎么调试?
谢谢!

论坛徽章:
89
水瓶座
日期:2014-04-01 08:53:31天蝎座
日期:2014-04-01 08:53:53天秤座
日期:2014-04-01 08:54:02射手座
日期:2014-04-01 08:54:15子鼠
日期:2014-04-01 08:55:35辰龙
日期:2014-04-01 08:56:36未羊
日期:2014-04-01 08:56:27戌狗
日期:2014-04-01 08:56:13亥猪
日期:2014-04-01 08:56:02亥猪
日期:2014-04-08 08:38:58程序设计版块每日发帖之星
日期:2016-01-05 06:20:00程序设计版块每日发帖之星
日期:2016-01-07 06:20:00
2 [报告]
发表于 2012-11-15 22:51 |只看该作者
You really got the fucking funny point!

论坛徽章:
0
3 [报告]
发表于 2012-11-16 09:00 |只看该作者
别无他法时,二分排除法是不错的选择

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
4 [报告]
发表于 2012-11-16 09:14 |只看该作者
只是读写(不释放、重分配)肯定没问题的,当前在使用期间不要把动态库给释放了

论坛徽章:
59
2015年亚洲杯之约旦
日期:2015-01-27 21:27:392015年亚洲杯之日本
日期:2015-02-06 22:09:41拜羊年徽章
日期:2015-03-03 16:15:432015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015元宵节徽章
日期:2015-03-06 15:50:392015年亚洲杯之阿联酋
日期:2015-03-19 17:39:302015年亚洲杯之中国
日期:2015-03-23 18:52:23巳蛇
日期:2014-12-14 22:44:03双子座
日期:2014-12-10 21:39:16处女座
日期:2014-12-02 08:03:17天蝎座
日期:2014-07-21 19:08:47
5 [报告]
发表于 2012-11-16 09:50 |只看该作者
回复 1# 叶叶叶Yeah


don't do that.

in some case, malloc is redefined as specified purpose (ex. locate the bug)
  1. #ifdef malloc
  2. #undef malloc
  3. #endif
  4. struct mheader{
  5.         union{
  6.                 char tag[1];
  7.                 long long ll[8];
  8.         }tag;
  9.         void *p;
  10. };
  11. void *_inner_malloc(size_t _Size,char *context){
  12.         void *_innerp=NULL;
  13.         struct mheader* pm=(struct mheader *)malloc(sizeof(struct mheader)+_Size);
  14.         if(pm){
  15.                 strncpy(pm->tag.tag,context,sizeof(pm->tag.ll));
  16.                 _innerp=&pm->p;
  17.         }
  18.         return _innerp;
  19. }

  20. #ifdef free
  21. #undef free
  22. #endif
  23. void _inner_free(void *p){
  24.         if(p!=NULL){
  25.                 struct mheader* pm=(struct mheader*)(((char *)p)-(int)&((struct mheader *)0)->p);
  26.                 free(p);
  27.         }
  28. }

  29. #define malloc(x) _inner_malloc(x,__FILE__)
  30. #define free _inner_free
复制代码

论坛徽章:
0
6 [报告]
发表于 2012-11-16 10:55 |只看该作者
这样做太坑爹了

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
7 [报告]
发表于 2012-11-16 12:30 |只看该作者
动态库分配的内存由动态库释放, 这个规矩永远都不会变.

论坛徽章:
0
8 [报告]
发表于 2012-11-16 12:35 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
9 [报告]
发表于 2012-11-16 22:52 |只看该作者
linux_c_py_php 发表于 2012-11-16 12:30
动态库分配的内存由动态库释放, 这个规矩永远都不会变.


竟然有这种规矩?
那就是说可以把动态库分配的空间传给其它模块使用?
能把动态库里的静态变量传给其它模块使用吗?

论坛徽章:
0
10 [报告]
发表于 2012-11-16 22:55 |只看该作者
folklore 发表于 2012-11-16 09:50
回复 1# 叶叶叶Yeah


这代码只是定义了一个自己的内存分配函数而已,并且也有改变原有的 malloc函数 ,
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP