关于main函数的奇怪问题

blackcat242 2008-09-16 04:14:35
这是一个main函数,但是奇怪的是,我加上exit,函数直接退出,没有问题;但是不加exit,单步调试,走到return 0后,竟然有跳到了main的开头执行,导致异常,请问这个是什么原因??
int main(int argv,char** args)
{
std::string strDLLPath = "D:\\server\\Debug\\tk.dll";
ACE_DLL *m_pAceDll = new ACE_DLL;
int errorCode = m_pAceDll->open(strDLLPath.c_str());
if(0 != errorCode)
{
cout<<"Fail to open the dll file!"<<endl;
exit(0);
}

void* funcPointer = m_pAceDll->symbol("createDllInterface");
ErrorCode (*createInterface)(CDllInterface*&) = (ErrorCode(*)(CDllInterface*&))funcPointer;
ErrorCode returnValue = createInterface(m_dllInterface);
if (0 == returnValue)
{
m_dllInterface->initializeDll();
m_dllInterface->finalizeDll();
}

m_pAceDll->close();
ACE_OS::_exit();//没有这句,main函数执行完return,竟然有跳到了函数的开头??!!
return 0;
}
...全文
145 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
coolblackcat 2008-10-12
  • 打赏
  • 举报
回复
blackcat242 2008-09-22
  • 打赏
  • 举报
回复
那我如何知道是哪里导致栈被破坏了么?
gLoli 2008-09-17
  • 打赏
  • 举报
回复
以下汇编组合等价于goto语句:
push 32位地址
ret

函数执行return时,对应的汇编指令就是ret,
假如此时栈中地址值不是调用main的地方的下一句的地址,而是main自己的地址
就发生楼主所见的问题
gLoli 2008-09-17
  • 打赏
  • 举报
回复
栈平衡被破坏
调用main运行前,函数地址会压栈保护
但return后,假如少弹出这个,也就是出现不平衡时,返回的位置就异常
楼主这个显然是因为main内部有函数在弹出参数时,没有弹出正确的个数导致的
帅得不敢出门 2008-09-16
  • 打赏
  • 举报
回复
估计是ACE_OS做怪了.
blackcat242 2008-09-16
  • 打赏
  • 举报
回复
确确实实跳到了第一个,我也很奇怪!!
e_sharp 2008-09-16
  • 打赏
  • 举报
回复
bingwa 2008-09-16
  • 打赏
  • 举报
回复
自己写的类吧。
可能是自己写的类没有释放资源什么的,看看吧。
bingwa 2008-09-16
  • 打赏
  • 举报
回复
ACE_OS 是什么东东。。
qqwx_1986 2008-09-16
  • 打赏
  • 举报
回复
还会这样? 没遇见过啊
K行天下 2008-09-16
  • 打赏
  • 举报
回复
没可能吧

64,654

社区成员

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

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