是这样的
分配全局内存
hMem = GlobalAlloc(GHND, sizeof(MyCBStruct));
强制转换为我自定义的结构MyCBStruct
MyCBStruct *pGlobal = (MyCBStruct*)GlobalLock(hMem);
我自定义的结构MyCBStruct中有一个stl的list链表
std::list<DWORD> m_listDW
现在的问题是转换来的指针pGlobal 中的 m_listDW 好像是没有初始化的 (我也不太清楚)
总之,是不能进行任何操作,push_back,clear都不行
有没有办法能够初始化(也许是别的操作 -_-)这个list链表吗?
让我能进行正常的操作。。
谢谢! 问题点数:100、回复次数:17Top
1 楼healer_kx(甘草(楼主揭贴吧,我们这些上班灌水的也不容易))回复于 2006-03-15 17:28:12 得分 100
你是想把list对象放到Global内存上,还是list管理的内容放到那块内存上?
第一个,
使用replacement new
new (pPtr) std::list();
第二个
修改list<T, A>的第二个模板参数,是Allocator,
你自己写个MyAlloc,分配的时候使用GlobalAlloc了、Top
2 楼lglabc(会飞的熊猫)回复于 2006-03-15 17:35:32 得分 0
我要的是第一种情况
把list对象放到Global内存上
不过我对replacement new仅仅在书上看到过,不太明白它的使用和意义
new (pPtr) std::list();
其中的pPtr是什么呢?类型?还是指针?
谢谢!Top
3 楼healer_kx(甘草(楼主揭贴吧,我们这些上班灌水的也不容易))回复于 2006-03-15 17:37:49 得分 0
pPtr是你GA分配到的那个内存,然后我们在那个内存上构造list对象。
Top
4 楼lglabc(会飞的熊猫)回复于 2006-03-15 17:46:08 得分 0
明白了,就是在已经分配的内存空间上构造对象
不过好像编译器不认这种操作。。
vs 2003
因为,我用int 来试了试也失败了。。Top
5 楼healer_kx(甘草(楼主揭贴吧,我们这些上班灌水的也不容易))回复于 2006-03-15 17:50:21 得分 0
你要include一个头文件了。
记得是<new.h>Top
6 楼lglabc(会飞的熊猫)回复于 2006-03-15 17:54:19 得分 0
包含了还是失败。。。
难道是不标准的用法?Top
7 楼healer_kx(甘草(楼主揭贴吧,我们这些上班灌水的也不容易))回复于 2006-03-15 17:59:48 得分 0
不可能,你再调政下了。,Top
8 楼lglabc(会飞的熊猫)回复于 2006-03-15 18:09:14 得分 0
奇怪,控制台程序就能成功
MFC的程序就失败。。
难道MFC里面有什么冲突?Top
9 楼lglabc(会飞的熊猫)回复于 2006-03-15 18:10:26 得分 0
FT!!!
MFC下的release 就能成功
是不是DEBUG中对 new 进行了重写。。。Top
10 楼healer_kx(甘草(楼主揭贴吧,我们这些上班灌水的也不容易))回复于 2006-03-15 18:16:54 得分 0
呵呵,有个DEBUG_NEW嘛,你要注意include的位置吧?Top
11 楼lglabc(会飞的熊猫)回复于 2006-03-15 18:22:34 得分 0
貌似即使在后面包含<new>,DEBUG_NEW还是会起作用。。
汗,干脆屏蔽掉了。。
有没有啥其他好办法?Top
12 楼healer_kx(甘草(楼主揭贴吧,我们这些上班灌水的也不容易))回复于 2006-03-15 18:36:41 得分 0
不好说,那个是宏啊,它会进行简单的替换的,这个替换还是挺野蛮的哈~
那个宏只是帮你来检测DEBUG版本的内存泄漏的。
Top
13 楼lglabc(会飞的熊猫)回复于 2006-03-15 18:39:58 得分 0
没办法
只好屏蔽掉了,可惜看不到内存泄露了,这样也麻烦。。
对了
new (pPtr) std::list();好像还不能成功
这个显式使用list 的构造函数,怎么才能指定参数呢?
呵呵,麻烦甘草了
Top
14 楼healer_kx(甘草(楼主揭贴吧,我们这些上班灌水的也不容易))回复于 2006-03-15 18:44:12 得分 0
哦,我那个是简写的。。
list好歹也是模板类啊。
new (p) list<int>();
应该这样吧才对。Top
15 楼lglabc(会飞的熊猫)回复于 2006-03-15 18:50:27 得分 0
成功了!!!
谢谢healer_kx(甘草)。
唉,感慨一下:什么东西停留在表面迟早是要不行的。。
我当初用stl,现在用boost等等,全都是贪图省事,其实对模板一窍不通
以后要好好学习了
再次谢谢healer_kx(甘草)。
结帐!Top
16 楼healer_kx(甘草(楼主揭贴吧,我们这些上班灌水的也不容易))回复于 2006-03-15 18:58:55 得分 0
赚点分不容易啊。。。 。。。Top
17 楼lglabc(会飞的熊猫)回复于 2006-03-17 17:25:47 得分 0
哈哈,甘草缺分的话
可以多来回答我的问题,几千分我还是有的^0^Top