相同函数不同地方使用表现不一致

幻夢之葉 2017-11-01 10:03:13
两个dll
A.dll 这里有一个单实例SingleInstance类的函数Func
B.dll

情况一(正常期待的表现)
A中:
SingleInstance.Func();

情况二(调试下代码执行顺序跳段)
A中:
F(); // B的一个函数
B中F():
SingleInstance.Func();

除了调用地方在不同dll,理论上程序的流程是相同的(包括有效代码的顺序)

以上是我遇到的问题,错误在于函数内跳段导致有些代码重复执行。
0:bool b = ...
1:if() ...
2:else ...
3:...
4:if()

调试时候程序执行跳段,如:0 1 2 3 1 2 3

SingleInstance是用导出dll的形式定义的类,并且含有map类型的一个成员
因此编译器发出警告C4251
https://msdn.microsoft.com/zh-cn/library/esew7y1w.aspx
我解决的方法是把该成员提出来放在cpp中,作为一个全局静态变量,不再提示警告

我怀疑的是dll在执行过程中数据被破坏,但是找不到是原因!

请求大牛能提示出错误的原因,或者可能是什么原因,感激不尽!


...全文
324 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-11-02
  • 打赏
  • 举报
回复
码农都是在一次次证明自己蠢萌的经历中进步的。
自信男孩 2017-11-02
  • 打赏
  • 举报
回复
FoolCarpe 2017-11-02
  • 打赏
  • 举报
回复
好会玩
幻夢之葉 2017-11-02
  • 打赏
  • 举报
回复
引用 3 楼 paschen 的回复:
引用 4 楼 hefashion0190 的回复:
引用 5 楼 cfjtaishan 的回复:
引用 6 楼 zhao4zhong1 的回复:
低级错误了!GAY尬 今天又遇到一个问题,折腾我一下午还没搞明白,可以帮忙看看么,感激感激! http://bbs.csdn.net/topics/392282230
paschen 版主 2017-11-01
  • 打赏
  • 举报
回复
引用 2 楼 jianwen0529 的回复:
被自己蠢哭了,打扰了大家,告辞!PS:因为前期调用的时候,该函数指针是nullptr的,导致的错误
解决了就好,必要时可以看下生成的汇编代码或查看调用堆栈看是怎么导致调用到的,一般很容易发现问题原因
幻夢之葉 2017-11-01
  • 打赏
  • 举报
回复
被自己蠢哭了,打扰了大家,告辞! PS:因为前期调用的时候,该函数指针是nullptr的,导致的错误
幻夢之葉 2017-11-01
  • 打赏
  • 举报
回复
我发现问题不在于上面所诉,我上代码

1) if (TheRender.IsExistMinmaxBox(1))
    {
        TheRender.EnableMinmaxBox(1);
    }
    else
    {
        TheRender.CreateMinmaxBox(1, true);
    }

    this->UpdateGLView();
2)  m_pfnOwnerDrawer();
// Other code
从1)执行到2),又重新回到1)中,即使m_pfnOwnerDrawer是空函数 m_pfnOwnerDrawer是另一个dll(即前面说的B dll)注册给这里的一个C函数指针

65,186

社区成员

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

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