免费注册 查看新帖 |

Chinaunix

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

fopen 与 malloc [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-08-16 23:12 |只看该作者 |倒序浏览
请问一下,调用fopen的时候,会自动去调用malloc吗?
我的程序经常在运行到fopen的时候,出现glibc detected malloc memory corruption这样的错误。

调用就调用吧,为啥还出这种错呢?

[ 本帖最后由 marco_hxj 于 2009-8-16 23:19 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-08-16 23:25 |只看该作者
一般是调用后,再自己用malloc去开辟空间啊

论坛徽章:
0
3 [报告]
发表于 2009-08-17 00:54 |只看该作者
会 但一般不会出现你描述的错误 方便的话贴代码上来瞧瞧

论坛徽章:
0
4 [报告]
发表于 2009-08-17 10:01 |只看该作者
  1. void start_record_video(void)
  2. {       
  3.         time_t t;
  4.         struct tm t_utc;
  5.         int k;
  6.         char outfile_name[CHANNEL_COUNT][150];
  7.         char outfile_name_len[CHANNEL_COUNT][150];
  8.         char tmp[10];
  9.         char tmp2[10];

  10.        
  11.         time(&t);
  12.         localtime_r(&t, &t_utc);

  13.         memset(rec_file_name, 0, 56);
  14.         sprintf(rec_file_name, "%d-%d-%d_%d-%d-%d_",t_utc.tm_year+1900,
  15.                 t_utc.tm_mon +1, t_utc.tm_mday,t_utc.tm_hour, t_utc.tm_min, t_utc.tm_sec);

  16.         printf("rec_file_name====%s\n", rec_file_name);
  17.         printf("strlen rec_file_name=%d\n",strlen(rec_file_name));

  18.        
  19.         for(k=0; k<4; k++)
  20.         {
  21.                 strcpy(outfile_name[k], spath);
  22.                 strcpy(outfile_name_len[k], spath);
  23.                
  24.                 strcat(outfile_name[k], rec_file_name);
  25.                 strcat(outfile_name_len[k], rec_file_name);

  26.         }

  27.         for(k=0;k<CHANNEL_COUNT;k++)
  28.         {
  29.                 if(g_rec_enable_channel[k] == 1)
  30.                 {       
  31.                         memset(tmp, 0, 10);
  32.                         memset(tmp2, 0, 10);
  33.                        
  34.                         sprintf(tmp, "%d.264", k+1);
  35.                         sprintf(tmp2, "%d.bin", k+1);
  36.                         strcat(outfile_name[k], tmp);
  37.                         strcat(outfile_name_len[k], tmp2);
  38.                        
  39.                         printf("%s\n", outfile_name[k]);
  40.                         printf("%s\n", outfile_name_len[k]);
  41.                
  42.                        
  43.                         g_dout[k] = fopen(outfile_name[k],"wb");
  44.                        
  45.                         //perror("fopen1\n");
  46.                        
  47.                         g_dout_len[k] = fopen(outfile_name_len[k],"wb");
  48.                         //perror("fopen2\n");
  49.                         printf("after fopen\n");
  50.                 }
  51.         }
  52.         g_localstream_enable= 1;
  53.         package_time_counts= 0;
  54. }
复制代码

[ 本帖最后由 marco_hxj 于 2009-8-17 10:05 编辑 ]

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
5 [报告]
发表于 2009-08-17 15:03 |只看该作者
原帖由 marco_hxj 于 2009-8-17 10:01 发表
void start_record_video(void)
{       
        time_t t;
        struct tm t_utc;
        int k;
        char outfile_name[CHANNEL_COUNT][150];
        char outfile_name_len[CHANNEL_COUNT][150];
        char tmp[10];
        char tmp2[10];

...

rec_file_name怎么定义的?

论坛徽章:
0
6 [报告]
发表于 2009-08-17 15:07 |只看该作者
原帖由 yulihua49 于 2009-8-17 15:03 发表

rec_file_name怎么定义的?

char rec_file_name[56];

论坛徽章:
0
7 [报告]
发表于 2009-08-17 21:19 |只看该作者
从你的代码里面看不出来 你可以试着自己加上一些printf语句 把
CHANNEL_COUNT
outfile_name[k]
spath
outfile_name_len[k]
rec_file_name
等变量的值变化情况打印出来 看看是否有存在越界操作的情况

论坛徽章:
0
8 [报告]
发表于 2009-08-19 17:08 |只看该作者
我的另外一个线程里也调用了
time(&t);
localtime_r(&t, &t_utc);
而且是一秒钟调用一次

会不会是这个原因造成的?

论坛徽章:
0
9 [报告]
发表于 2009-08-19 17:54 |只看该作者
调用fopen 打开一个文件流,没听说会自动打开malloc。只是它的控制是带缓冲的Io流控制

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:53:172015亚冠之水原三星
日期:2015-06-02 16:34:202015年亚冠纪念徽章
日期:2015-10-19 18:13:37程序设计版块每日发帖之星
日期:2015-11-08 06:20:00
10 [报告]
发表于 2009-08-20 21:42 |只看该作者
fopen()内部实现使用了malloc()或者其他内存申请方式.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP