safearrayDestroy不能释放safearray,有内存泄露

时间:2020-12-10 20:10:10
代码如下:

VARIANT   varArray;  
int   len=200;   
SAFEARRAYBOUND   bound;   
bound.cElements=1024*len;   
bound.lLbound=0;   
SAFEARRAY*   psa=NULL;
psa=SafeArrayCreate(VT_I1 ,1,&bound);  
psa->fFeatures=FADF_AUTO|FADF_FIXEDSIZE;
psa->cbElements =1;
SafeArrayDestroy(psa);

只要把fFeatures设置为FADF_AUTO就有内存泄露,不知道为什么safeArrayDestroy不管事

8 个解决方案

#1


http://www.examda.com/ncre2/cpp/fudao/20080922/08183340.html

#2


没人遇到过?

#3


#define FADF_AUTO 0x0001 // Array is allocated on the stack
这个safearray明明不是在stack上分配的,你硬说它是stack分配的,当然有问题,在stack上分配的变量是不需要释放的,你告诉它不释放,能不泄漏么?使用一个标志要明白其含义,不能瞎用

#4


我用vc没多久,搞不清楚内存分配的位置,以你的意思,这个safearray是在哪分配的?堆?

#5


总之不在栈,可能是堆,也可能是全局地址空间中(直接调用VirtualAlloc得不在堆上),这要看MS得设计了
引用 4 楼 libbo2000 的回复:
我用vc没多久,搞不清楚内存分配的位置,以你的意思,这个safearray是在哪分配的?堆?

#6


多谢 阿荣,我再研究一下,:)

#7


用另外一种方法解决了,这个还是不行,不用FADF_AUTO,我换了其他的参数还是有问题。
结贴

#8


多谢 happyparrot 的衔接

#1


http://www.examda.com/ncre2/cpp/fudao/20080922/08183340.html

#2


没人遇到过?

#3


#define FADF_AUTO 0x0001 // Array is allocated on the stack
这个safearray明明不是在stack上分配的,你硬说它是stack分配的,当然有问题,在stack上分配的变量是不需要释放的,你告诉它不释放,能不泄漏么?使用一个标志要明白其含义,不能瞎用

#4


我用vc没多久,搞不清楚内存分配的位置,以你的意思,这个safearray是在哪分配的?堆?

#5


总之不在栈,可能是堆,也可能是全局地址空间中(直接调用VirtualAlloc得不在堆上),这要看MS得设计了
引用 4 楼 libbo2000 的回复:
我用vc没多久,搞不清楚内存分配的位置,以你的意思,这个safearray是在哪分配的?堆?

#6


多谢 阿荣,我再研究一下,:)

#7


用另外一种方法解决了,这个还是不行,不用FADF_AUTO,我换了其他的参数还是有问题。
结贴

#8


多谢 happyparrot 的衔接