C++,MT运行库,同模块申请和释放内存,程序崩溃

jiushophy 2017-08-07 09:41:13
跨模块内存操作,按道理申请内存和释放内存,在同一个模块就不会出问题,我这个怎么有问题了。不多
说,直接上代码

//dll中某个类,_API为导出符号
class _API test1
{
public:
test1() { m_mem = NULL; }
~test1()
{
delete m_mem;
}

static test1* Create()
{
return new test1;
}
void Release()
{
delete this;
}
void startMemory()
{
m_mem = new int;
*m_mem = 1;
int iii = 0;
}
//成员变量
int *m_mem;
};

//另一个模块,直接调用模块一中类,申请内存,再释放,结果释放内存时蹦
test1 *t1 = test1::Create();
t1->startMemory();
t1->Release();

觉得很奇怪,new和delete都是在模块一中,为什么还出问题,我用的是MT的运行时库,MD的应该没问题

,哪位大神帮忙解释一下
...全文
462 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
wh_ 2017-08-18
  • 打赏
  • 举报
回复
引用 13 楼 jiushophy 的回复:
创建和释放函数前都加virtual就行,参考这篇博客http://blog.csdn.net/zj510/article/details/35290505
他那种情况是两个模块中都有那个类的代码,比如一个类,有.h .cpp。然后他一个dll和一个exe中各有一份,从而两个模块中各自的代码。然后造成了创建与释放在不同的模块中实现。加virtual后可以通过虚函数表也实现在同一个模块中调用。 跟你的情况不太一样,你的是把整个类都导出了,然后导入整个类。这个类的代码只存在在dll中。不存在每个模块都有一份代码的情况。所以你的代码是没有问题的。除非你也是在exe中有一个类的实现的代码
jiushophy 2017-08-18
  • 打赏
  • 举报
回复
创建和释放函数前都加virtual就行,参考这篇博客http://blog.csdn.net/zj510/article/details/35290505
wh_ 2017-08-14
  • 打赏
  • 举报
回复
引用 10 楼 jiushophy 的回复:
[quote=引用 9 楼 wh_2396 的回复:] 是这样的,如果你用的是MD,你想在哪里申请,想在哪里释放都没有问题,但如果你用的是MT,就只能在模块内申请,在模块内释放。
我知道MD的可以随便在哪里申请和释放,可我用的是MT的,包装一层之后申请和释放内存应该都在第一个模块进行,可还是有问题。[/quote]反正我把你的代码复制下来运行了一次,什么问题都没有出来
jiushophy 2017-08-12
  • 打赏
  • 举报
回复
引用 5 楼 dong364 的回复:
第三方的dll的代码生成要设置一致,要么都是/md 要么都是/mt
这里没有涉及到第三方库
jiushophy 2017-08-12
  • 打赏
  • 举报
回复
引用 9 楼 wh_2396 的回复:
是这样的,如果你用的是MD,你想在哪里申请,想在哪里释放都没有问题,但如果你用的是MT,就只能在模块内申请,在模块内释放。
我知道MD的可以随便在哪里申请和释放,可我用的是MT的,包装一层之后申请和释放内存应该都在第一个模块进行,可还是有问题。
wh_ 2017-08-11
  • 打赏
  • 举报
回复
是这样的,如果你用的是MD,你想在哪里申请,想在哪里释放都没有问题,但如果你用的是MT,就只能在模块内申请,在模块内释放。
wh_ 2017-08-11
  • 打赏
  • 举报
回复
我亲自写了一遍,一点问题都没有?
赵4老师 2017-08-08
  • 打赏
  • 举报
回复
jena_wy 2017-08-08
  • 打赏
  • 举报
回复
代码看着没有问题,看是不是其他的问题。
赵4老师 2017-08-07
  • 打赏
  • 举报
回复
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止
trytry1992 2017-08-07
  • 打赏
  • 举报
回复
delete this -> 调用析构 -> delete this -> .....
trytry1992 2017-08-07
  • 打赏
  • 举报
回复
。。。。 你这个delete this是什么意思
dong364 2017-08-07
  • 打赏
  • 举报
回复
第三方的dll的代码生成要设置一致,要么都是/md 要么都是/mt
jiushophy 2017-08-07
  • 打赏
  • 举报
回复

补充一下程序崩溃的提示
企业智慧中台规划与建设总体方案是一个针对企业数字化转型需求而设计的综合性IT解决方案。该方案旨在构建一个集中、高效和灵活的中台架构,通过整合企业内外部的数据资源、业务流程和应用服务,为企业提供一个统一的数字化运营平台。在当前的商业环境下,企业面临着激烈的市场竞争和不断变化的客户需求。为了应对这些挑战,企业需要快速响应市场变化,提高运营效率,降低成本,并实现持续创新。因此,企业智慧中台的规划和建设成为了关键任务。该方案的核心思想是将企业的业务逻辑、数据管理和技术创新紧密结合起来,形成一个高度集成的智慧中台系统。通过构建标准化的数据模型和接口,实现数据的一致性和可访问性,同时提供丰富的数据分析和挖掘工具,帮助企业发现潜在的商业价值和机会。此外,该方案还注重用户体验和业务敏捷性。通过构建灵活的应用开发框架和API接口,支持快速的业务迭代和定制化需求,满足不同部门和角色的个性化需求。同时,通过智能化的自动化流程和决策支持系统,提高企业的决策效率和准确性。总之,企业智慧中台规划与建设总体方案是一个全面而深入的IT解决方案,旨在帮助企业实现数字化转型,提升竞争力和创新能力。通过构建集中、高效和灵活

64,639

社区成员

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

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