C++有没有可能函数返回值是true,而返回之后得到的结果是false?

jacqueslim 2011-10-27 07:25:50
最近在用QT写一个连连看游戏。。经过数次的调试可以确定,一个函数结果是return true,而当利用这个结果时,就变成了false...请问各位有没有遇到这些情况?求解答,谢谢。
...全文
457 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
jacqueslim 2011-10-28
  • 打赏
  • 举报
回复
bool MyWidget::firstMatch(myButton &fClick, myButton &sClick) //这个函数是实现不拐弯匹配。
{
int R = 0, C = 0;
int min1 = 0, max1 = 0, min2 = 0, max2 = 0;
if (fClick.getButtonRow() == sClick.getButtonRow())
{
R = fClick.getButtonRow();
min1 = fClick.getButtonCol()>sClick.getButtonCol()?sClick.getButtonCol():fClick.getButtonCol();
max1 = fClick.getButtonCol()>sClick.getButtonCol()?fClick.getButtonCol():sClick.getButtonCol();
for (int i = min1 + 1; i < max1; i++)
{
if (button[10 * R + i]->getFootPrint())
{

return false;

}

}
if (fClick.getObjectText() == sClick.getObjectText())
{

return true;
}
else
{
return false;
}
}
else if (fClick.getButtonCol() == sClick.getButtonCol())
{
C = fClick.getButtonCol();
min2 = fClick.getButtonRow()>sClick.getButtonRow()?sClick.getButtonRow():fClick.getButtonRow();
max2 = fClick.getButtonRow()>sClick.getButtonRow()?fClick.getButtonRow():sClick.getButtonRow();
for (int i = min2 + 1; i < max2; i++)
{
if (button[10 * i + C]->getFootPrint())
{
return false;

}

}
if (fClick.getObjectText() == sClick.getObjectText())
{

return true;
}
else
{
return false;
}
}
else
{
return false;
}

}
追求执着 2011-10-28
  • 打赏
  • 举报
回复
星羽 2011-10-28
  • 打赏
  • 举报
回复
firstMatch
看看你这个函数的实现
jacqueslim 2011-10-27
  • 打赏
  • 举报
回复
如下是我游戏里的一个代码例子
if (!button[10 * i1 + j1]->getFootPrint())
{
if (firstMatch(*button[10 * i1 + j1], sClick) && firstMatch(*button[10 *i1 + j1], fClick))
{
return true;
}
}

这里firstMatch(*button[10 * i1 + j1], sClick)返回的结果是false,但是却进入了if语句的函数体。。。这是为什么啊
jacqueslim 2011-10-27
  • 打赏
  • 举报
回复
什么是不可能被其它程序直接访问??[Quote=引用 1 楼 mscf 的回复:]

仔细检查下,函数返回是临时变量,不可能被其它程序直接访问的,很邪门~
[/Quote]
jacqueslim 2011-10-27
  • 打赏
  • 举报
回复
我就是单步跟踪到函数的return true,而当利用到函数的返回值时却是false...很困惑,找了一天的原因。。找不到。。。
iamnobody 2011-10-27
  • 打赏
  • 举报
回复
楼上正解。肯定是修改了返回的eax
gw_net 2011-10-27
  • 打赏
  • 举报
回复
debug with assemly code
bottlerun 2011-10-27
  • 打赏
  • 举报
回复
栈坏了,要么踩坏了,要么溢出了
pb_myown 2011-10-27
  • 打赏
  • 举报
回复
不会出现这样的情况
pandeng4639088 2011-10-27
  • 打赏
  • 举报
回复
这是不可能出现的,除非电脑中病毒,或是程序错序,因为在函数调用中,程序会保存当前工作的函数,压入堆栈,进入函数调用(此时栈顶为调用的函数),调用的函数工作完成后,程序返回时,会把返回的值一起带回,调用函数出栈,程序将带回的值回到原先调用函数的地点。

如果不出意外的话,是不可能出现楼主所说的情况
柯本 2011-10-27
  • 打赏
  • 举报
回复
数组越界,内存溢出,非法指针使用,及不正当的类型转换等都可以导致程序的异常,检查程序,单步跟踪下.
zhanglingkangk 2011-10-27
  • 打赏
  • 举报
回复
不会的。
qing_ping 2011-10-27
  • 打赏
  • 举报
回复
你用一个变量,函数返回时马上把结果保存试试。
薛定谔之死猫 2011-10-27
  • 打赏
  • 举报
回复
仔细检查下,函数返回是临时变量,不可能被其它程序直接访问的,很邪门~

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧