什么时候会出现这种情况?~堆栈错误问题

mxzy55560593 2011-05-31 09:38:03
自己的工程碰见了这种问题,百度了下,发现了这段话:

原先的函数有6个参数,也就是说这六个参数被压入堆栈,然后调用的函数只有5个参数,导致了堆栈出错;在之后的调用中,再检查堆栈就报错了

问题碰见的和我一模一样,也是调用了一个函数后堆栈出错了,我想模拟下这种情况,但是模拟不出来,因为如果你这样写:

void WCG(int a)
{
return;
}
int _tmain(int argc, _TCHAR* argv[])
{
WCG(1,2);
return 0;
}

编译器是会报错的,那那段话什么情况下会出现?谁能模拟下?
因为自己工程函数调用非常多,所以我想先模拟下,看看实际情况

...全文
219 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaokliu 2011-12-09
  • 打赏
  • 举报
回复
没看明白
cpplab 2011-05-31
  • 打赏
  • 举报
回复
使用GetProcAddress是不管参数是否正确,编译不会报错。为减少运行错误,需要养成一个良好的编程习惯,风格。程序放几个月后,还能一看就明,基本可以。
www_adintr_com 2011-05-31
  • 打赏
  • 举报
回复
分成两个文件来写就可以了:
文件1.cpp:

extern "C" int dosomething(int, int);

int main()
{
dosomething(10, 20);
}

文件2.pp:

extern "C" int dosomething(int a1, int a2, int a3)
{
return printf("%d, %d, %d", a1, a2, a3);
}
aozhi 2011-05-31
  • 打赏
  • 举报
回复
调用时,多写几个参数就应该报错了。因为栈保护机制,2个参数不足以报错。改成8个看看。
luciferisnotsatan 2011-05-31
  • 打赏
  • 举报
回复
用c风格导出函数,c++风格,会把函数参数类型什么的都编码成函数名的一部分。修改发布库的头文件应该会报错
luciferisnotsatan 2011-05-31
  • 打赏
  • 举报
回复
lib不能显示加载,dll隐式加载,应该也过不了编译器(不过可以修改下头文件里的WCG函数签名试试)。
windows下,
LoadLibrary 显示加载dll
GetProcAddress 获取函数地址
mxzy55560593 2011-05-31
  • 打赏
  • 举报
回复
还有C++模板会不会造成这种情况?我在试验下~
mxzy55560593 2011-05-31
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 luciferisnotsatan 的回复:]
至于模拟,你可以写个dll,然后导出WCG函数。
再建个工程,显示加载dll,获取WCG函数地址。而指向那个函数地址的函数指针有两个参数。
[/Quote]
原来如此,明白了,lib应该是一样的效果吧,我试试,还有没有别的情况造成喃?当然不是手动写汇编push之类的,等下结贴了
luciferisnotsatan 2011-05-31
  • 打赏
  • 举报
回复
至于模拟,你可以写个dll,然后导出WCG函数。
再建个工程,显示加载dll,获取WCG函数地址。而指向那个函数地址的函数指针有两个参数。
mxzy55560593 2011-05-31
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bdmh 的回复:]
WCG需要一个参数,你传两个参数,能通过吗
[/Quote]

我知道不能通过,我只是说明一下而已,我出现的问题是:编译期通过了,运行期报堆栈出错,并且我引用的那段话的那个人遇到了和我一样的情况~~所以我想模拟下
luciferisnotsatan 2011-05-31
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bdmh 的回复:]

WCG需要一个参数,你传两个参数,能通过吗
[/Quote]
正解
bdmh 2011-05-31
  • 打赏
  • 举报
回复
WCG需要一个参数,你传两个参数,能通过吗

64,666

社区成员

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

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