返回信息流有一个函数指针,其指向的函数应该是有两个参数的。
在给这个函数指针赋值的时候,赋了一个无形参的函数。
问:
在运行的时候,会出什么问题?
这是一条镜像帖。来源:北邮人论坛 / cpp / #28949同步于 2009/9/22
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
【请教】 函数指针
onion
2009/9/22镜像同步6 回复
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
【 在 onion 的大作中提到: 】
: 会出现“堆栈不平衡”吗?
: 我不懂得跟踪汇编代码。
: 能不能解释得详细些?
其实严格的讲,并不是一定会完全出现堆栈不平衡,这主要取决于调用规则。
具体的,我们以两种调用规则来说明。
(1)STDCALL调用规则,这样的调用规则必然出现堆栈不平衡。
测试代码:
void __stdcall fn(int a, int b)
{
return;
}
typedef void (__stdcall *FunPtr)(void);
int main()
{
FunPtr fuck = (FunPtr)(long)fn;
fuck();
return 0;
}
(2)C调用规则
这种规则并不会出现堆栈不平衡,不过运行结果是不正确的,因为参数是随机的。
测试代码:
void fn(int a, int b)
{
return;
}
typedef void (*FunPtr)(void);
int main()
{
FunPtr fuck = (FunPtr)(long)fn;
fuck();
return 0;
}
没法再详细些了,手酸。。。