| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 540 人关注过本帖
标题:linux as5 系统上运行程序退出
只看楼主 加入收藏
lemonyoung
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2010-4-9
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:8 
linux as5 系统上运行程序退出
void send_clock(i_year,i_month,i_day)
int i_year,i_month,i_day;
{
  unsigned char tempmsg[17];
  struct tm  *inittptr, *tptr;
  time_t  initclock, clock;
  int year, safeday,i;
 
  //  计算安全天数起始 initclock
 
  inittptr->tm_year = i_year-1900;    // 安全天数起始年份,从1900年开始;(现为2004年)
  inittptr->tm_mon = i_month-1;       // 安全天数起始月份,从0月开始,11月结束;(现为8月)
  inittptr->tm_mday = i_day;     // 安全天数日期
  inittptr->tm_hour = 0;      // 安全天数时
  inittptr->tm_min = 0;       // 安全天数分
  inittptr->tm_sec = 0;       // 安全天数秒

  initclock = mktime(inittptr);
  printf("safeday initclock = %d\n", initclock);

  tempmsg[0] = HEAD1;
  tempmsg[1] = HEAD2;
  tempmsg[2] = 0x25;
  tempmsg[3] = 0xff;
  tempmsg[4] = 0x0b;
  clock = time((time_t *)NULL);
  tptr = localtime(&clock);
  printf("date : clock = %d; %d.%d.%d , %d ,%d.%d.%d \n", clock, tptr->tm_year,tptr->tm_mon+1,
        tptr->tm_mday,tptr->tm_wday,tptr->tm_hour,tptr->tm_min,
        tptr->tm_sec);
  
  safeday = (clock - initclock)/(24*3600);
  year = tptr->tm_year + 1900;
  tempmsg[5] = HtoD(year / 100);
  tempmsg[6] = HtoD(year % 100);
  tempmsg[7] = HtoD(tptr->tm_mon + 1);
  tempmsg[8] = HtoD(tptr->tm_mday);
  tempmsg[9] = HtoD(tptr->tm_wday);
  tempmsg[10] = HtoD(tptr->tm_hour);
  tempmsg[11] = HtoD(tptr->tm_min);
  tempmsg[12] = HtoD(tptr->tm_sec);
  tempmsg[13] = HtoD(safeday/10000);
  tempmsg[14] = HtoD((safeday%10000)/100);
  tempmsg[15] = HtoD(safeday%100);
  tempmsg[16] = LPC_check(tempmsg, 16);
  drvSendMsg(portInfo.fd, tempmsg, 17, 2);
 
      for (i=0;i<18;i++)
        printf("  %x  ", tempmsg[i]);
        printf("\n");
}

程序如上时,运行到红色标注段落时就退出,无core产生,
最后将struct tm  *inittptr, *tptr; 修改为struct tm  inittptr, *tptr;
initclock = mktime(inittptr); 修改为initclock = mktime(&inittptr);后程序运行正常。
虽然问题解决了,但疑问仍在,因为这段程序在别的地方用过,只是这次操作系统不一样是linux as5的系统,之前是as4的系统。
非常感谢!!!
搜索更多相关主题的帖子: linux 
2011-04-10 01:28
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:20 
声明的指针也没初始化,它不指向 struct tm 怎么会能工作。
2011-04-11 08:38
lemonyoung
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2010-4-9
收藏
得分:0 
回复 2楼 pangding
我用malloc函数初始化了,但程序会编译通不过 麻烦帮忙修改下 谢谢
2011-04-11 21:29
lemonyoung
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2010-4-9
收藏
得分:0 
根据之上朋友的指点 增加指针初始化如下
 if ((initpttr = (struct tm*)malloc(sizeof(struct tm ))) == NULL)
      exit_exe(0);

但是编译报错,不解,恳求赐教
2011-04-11 23:24
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
临时变量就用非指针就行了。为什么一定要用指针?甚至不惜动态分配都要用?

加了之后,报的错是什么?
2011-04-12 08:55
lemonyoung
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2010-4-9
收藏
得分:0 
我的疑问主要是为什么在as4系统上能够使用,在as5上就不行了,报错的内容我下午发给你
2011-04-12 12:21
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
它没指向东西就能用应该是个错误。原来的系统能用可能是可 bug 吧,后来 fix 了。
2011-04-12 15:05
lemonyoung
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2010-4-9
收藏
得分:0 
void send_clock(int i_year,int i_month,int i_day)
{
  unsigned char tempmsg[18];
  struct tm  *inittptr=NULL, *tptr;
  time_t  initclock, clock1,safeday;
  int year, i;
 
  inittptr = (struct tm *)malloc(sizeof(struct tm)) ;
  memset(inittptr , 0 , sizeof(struct tm)) ;
 
  //  计算安全天数起始 initclock

  inittptr->tm_year = i_year-1900;    // 安全天数起始年份,从1900年开始;(现为2004年)
  inittptr->tm_mon = i_month-1;       // 安全天数起始月份,从0月开始,11月结束;(现为8月)
  inittptr->tm_mday = i_day;     // 安全天数日期
  inittptr->tm_hour = 0;      // 安全天数时
  inittptr->tm_min = 0;       // 安全天数分
  inittptr->tm_sec = 0;       // 安全天数秒
 
  initclock = mktime(inittptr);
  printf("safeday initclock = %d\n", initclock);


  tempmsg[0] = HEAD1;
  tempmsg[1] = HEAD2;
  tempmsg[2] = 0x25;
  tempmsg[3] = 0xff;
  tempmsg[4] = 0x0b;
  clock1 = time((time_t *)NULL);
  tptr = localtime(&clock1);
  printf("date : clock = %d; %d.%d.%d , %d ,%d.%d.%d \n", clock1, tptr->tm_year,tptr->tm_mon+1,
        tptr->tm_mday,tptr->tm_wday,tptr->tm_hour,tptr->tm_min,
        tptr->tm_sec);
  
  safeday = (clock1 - initclock)/(24*3600);
  printf("safeday = %d\n",safeday);
  year = tptr->tm_year + 1900;
  tempmsg[5] = HtoD(year / 100);
  tempmsg[6] = HtoD(year % 100);
  tempmsg[7] = HtoD(tptr->tm_mon + 1);
  tempmsg[8] = HtoD(tptr->tm_mday);
  tempmsg[9] = HtoD(tptr->tm_wday);
  tempmsg[10] = HtoD(tptr->tm_hour);
  tempmsg[11] = HtoD(tptr->tm_min);
  tempmsg[12] = HtoD(tptr->tm_sec);
  tempmsg[13] = HtoD(safeday/10000);
  tempmsg[14] = HtoD((safeday%10000)/100);
  tempmsg[15] = HtoD(safeday%100);
  tempmsg[16] = LPC_check(tempmsg, 16);
  drvSendMsg(portInfo.fd, tempmsg, 17, 2);
 
      for (i=0;i<17;i++)
      printf("  %x  ", tempmsg[i]);
}
 修改程序如上后就可以了,存在的疑问是:*inittptr=NULL, *tptr 都是定义的两个指向tm结构的指针,为什么inittptr需要初始化,不然会出错,而tptr则不需要
2011-04-12 21:17
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
行为确实很诡异。你是说去掉 =NULL 这个语句,效果就不一样了吗?
你编译这段代码用的命令是什么?

主要是我没实验条件,也不太清楚是什么毛病。不过不用太再乎这个问题了其实。错误的用法出现错误的结果很正常。


[ 本帖最后由 pangding 于 2011-4-13 17:16 编辑 ]
2011-04-13 17:11
快速回复:linux as5 系统上运行程序退出
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013255 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved