标题:为毛有内存泄漏啊,我K,这不科学啊
只看楼主
天使梦魔
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:37
帖 子:564
专家分:2754
注 册:2007-8-29
结帖率:83.33%
已结贴  问题点数:100 回复次数:6 
为毛有内存泄漏啊,我K,这不科学啊
demo.rar (72.99 KB)
程序运行无问题,一退出就崩溃。查过了,没有内存释放不干净问题。


运行程序在rar包里面,使用opengl进行一个测试。
我自己写的是DLL文件,作用是对文件进行打包和加密。
已经经过一系列测试,所以对DLL内部的安全性不用质疑。
opengl部分是抄鼎鼎大名的nehe教程里的第6课。释放的部分没有改动,按道理应该没有内存泄漏。
而我的部件也不会出现泄漏的问题。
它的纹理读取使用的是辅助库,而我改了一下,直接读取我内存的文件。
自己添加的函数是void LoadTexture(void)。其它都是课程里的代码
extern "C" __declspec(dllimport) int ReadRZ(char *filename,char *readname,std::string &outtext);
//我DLL的接口
string mybmp;
//全局二进制文件变量,不要讨论我是怎么把二进制数据存放到string里的

这是程序代码:
lesson6.rar (6.04 KB)
搜索更多相关主题的帖子: 课程 加密 安全性 运行程序 
2014-02-20 21:16
天使梦魔
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:37
帖 子:564
专家分:2754
注 册:2007-8-29
得分:0 
对于自写函数那几个循环没有经过严格处理,但我能保证它是正确的,因为它的正确与否依赖图片的属性,这点我能保证,图片是bmp 256*256的大小
2014-02-20 21:19
天使梦魔
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:37
帖 子:564
专家分:2754
注 册:2007-8-29
得分:0 
问题找到一点,从string的部分释放有问题,但我又想不出是什么原因,因为我不使用内存纹理,只是读取数据,string在没有任何使用的情况下清零还是会出事。
就是说string在DLL内部走过一遍exe就无法释放了,但我输出接口用的是引用string的地址啊,真正储存string的还是exe自身,唉搞不懂唉~~~
2014-02-20 23:08
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:95 
extern "C" __declspec(dllimport) int ReadRZ(char *filename,char *readname,std::string &outtext);
--- 别用 std::string
第一:你dll中的std::string可能和exe中的std::string不是同一个类型,编译器在link时检查不出来
第二:std::string可能使用了自己的分配器,即使用不这样,也没法保证跨模块内存分配/内存释放能够匹配
2014-02-21 11:04
fl8962
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:539
专家分:2471
注 册:2012-10-17
得分:5 

想抽苏烟了。
2014-02-21 11:16
天使梦魔
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:37
帖 子:564
专家分:2754
注 册:2007-8-29
得分:0 
行了,我C,此时此刻我的心情就像要射出来一样爽。

我在DLL内部进行了一次释放
void freedll(string &s)
{
  s.~string();
}

EXE里面在EXE定义出来的string生命期结束前呼叫这个函数,就不会有泄漏了,我CCCCCCCCCCC
不可思议啊~~~~~~~~~~~~~
2014-02-21 15:05
天使梦魔
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:37
帖 子:564
专家分:2754
注 册:2007-8-29
得分:0 
蒙对了的有95分
打酱油的有5分
2014-02-21 16:34



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-427470-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.416435 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved