Chinaunix
标题:
一个有些费解的问题!关于对地址进行比较
[打印本页]
作者:
kaolaok
时间:
2005-07-19 16:51
标题:
一个有些费解的问题!关于对地址进行比较
在完善前辈们n年前的系统时,遇到了如下一段代码。
其中pgm_id为char型的指针变量,通过函数参数传入。
if (pgm_id >; "0"
{
dbfcmd (_DBProcess, "select count(*) from dvb_pgm_inf"
;
dbfcmd(_DBProcess," where pgm_id='%s'",pgm_id);
}
程序在gcc,icc下编译通过,运行正常。
明显是通过比较两个变量的地址而作为判断条件的,我判断前辈的本意是判断从数据库中读出的值:pgm_id所存储的值是否大于0。
我做了如下修改:
tmp=atoi(pgm_id);
if (tmp >; 0)
{
dbfcmd (_DBProcess, "select count(*) from dvb_pgm_inf"
;
dbfcmd(_DBProcess," where pgm_id='%s'",pgm_id);
}
编译运行后产生段错误,直接僵死。
我用strace跟踪,总是在同一个地方产生段错误。
拿来让大家讨论讨论。
作者:
yzc2002
时间:
2005-07-19 16:58
标题:
一个有些费解的问题!关于对地址进行比较
改成strlen(pgm_id) >; 0
作者:
FH
时间:
2005-07-19 17:08
标题:
一个有些费解的问题!关于对地址进行比较
if (pgm_id >; "0"
是两个地址的比较而不是值的比较。
作者:
zhhui2000
时间:
2005-07-19 17:14
标题:
一个有些费解的问题!关于对地址进行比较
改得没有什么不对的,怎么会这样?
作者:
xujunxp
时间:
2005-07-19 17:26
标题:
一个有些费解的问题!关于对地址进行比较
看不太懂,pgm_id >; "0",是什么意思
作者:
Moonwellatg4
时间:
2005-07-19 17:56
标题:
一个有些费解的问题!关于对地址进行比较
printf(pgm_id); //add
tmp=atoi(pgm_id);
printf("%d",tmp); /add
if (tmp >; 0)
试试看
作者:
Moonwellatg4
时间:
2005-07-19 17:57
标题:
一个有些费解的问题!关于对地址进行比较
或者用gdb,出现断错误以后查看调用堆栈.
作者:
kaolaok
时间:
2005-07-19 19:04
标题:
一个有些费解的问题!关于对地址进行比较
加了大量的打印信息进行跟踪了,还是没有收获。明天去公司用gdb调调看。我发现了一个比较可疑的地址,0x8.按理说这个地址是不可能被访问到的。
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2