奇怪的错误 打几句printf 会有不同的执行结果

mhhaifeng 2002-11-07 06:09:55
在一段代码中 如果是这样子就执行不下去
ExecuMysql(UCHAR* StrSQL,ULONG Srvtype,ULONG* RetrunSize,UCHAR** StrResult)
{
MYSQL* mysql;
int RetValue;
mysql_init(mysql);
printf("init mysql succeed and SrvType is %d \n",Srvtype);
}
而如果加上几句
MYSQL* mysql;
int RetValue;
printf("starting init mysql and Srvtype is %d \n",Srvtype);

printf("the StrSQL is %s\n",StrSQL);

mysql_init(mysql);
printf("init mysql succeed and SrvType is %d \n",Srvty

就能执行过 mysql_init(mysql); 打下一句信息
在程序另外的地方 打多几句printf 或少打几名
都会有不同的执行结果 即程序执行会执行到不同的地方停下
有时 我不知在什么地方打几句printf
我的程序甚至能够正常运行起来

请高手指点 这是什么原因?

谢谢
高分相送

...全文
121 点赞 收藏 8
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Einstein_M 2002-11-09
这种情况应该是由非法指针造成的,你最好用gdb跟踪一下,看看他停在哪,当时的堆栈数据是否正确,存不存在数组越界,非法修改内存的情况,应该很快就能找到问题的
回复
lanying 2002-11-09
ExecuMysql(UCHAR* StrSQL,ULONG Srvtype,ULONG* RetrunSize,UCHAR** StrResult)
{
MYSQL mysql;
int RetValue;
mysql_init(&mysql);
printf("init mysql succeed and SrvType is %d \n",Srvtype);
}
回复
mhhaifeng 2002-11-08
不关MYSQL的问题
这只是一种情况

我的程序 我执行到不同的地方的
不光是mysql_init(mysql) 这里执行不了



回复
hehe
up! gz!
回复
HouAQ 2002-11-08
up! gz!
回复
debme 2002-11-07
我怀疑是由于你用“MYSQL* mysql; ”,定义的是指针,而后又没给它分配空间,请尝试在“mysql_init(mysql);”前添加“mysql=new(MYSQL);”。
如还不行,能否把整个程序发给我(ligh56t@sina.com),看看。
对于后面加几条printf就可通过,我怀疑是因为printf申请了内存,而mysql用了它(们)所占的空间,也就有了多几条printf或少几条,运行结果就不同的后果。
回复
donicy 2002-11-07
是啊
我编写程序时,碰到没有printf语句,就不能正常运行的问题.
关注
帮你up
回复
x86 2002-11-07
搞不懂,不过可以给些参考

程序里常有一些非法指针(比如子函数返回局部变量,但是这些变量在堆栈中初始化,退出函数就无效),会造成错误
有的时候printf碰巧修改了堆栈里面的内容,使得非法指针看起来不会出错
但是实际上程序还是错的
如果是这种情况,你加别的函数也有类似效果
回复
相关推荐
发帖
Linux/Unix社区
创建于2007-08-27

2.1w+

社区成员

Linux/Unix社区 应用程序开发区
申请成为版主
帖子事件
创建了帖子
2002-11-07 06:09
社区公告
暂无公告