delete指針問題。
typedef struct tagIMGMOVEPROPERTY
{
WORD wIndex;
WORD wImgQuantity;
char** szImgfileName;
} IMGMOVEPROPERTY;
m_AnimatorClamp* IMGMOVEPROPERTY;
m_AnimatorClamp = new IMGMOVEPROPERTY;
m_AnimatorClamp->szImgfileName = new char* [5];
for (i=0;i<5;i++)
{
m_AnimatorClamp->szImgfileName[i] = new char[10];
m_AnimatorClamp->szImgfileName[i][9] = '\0';
}
m_AnimatorClamp如何delete?
问题点数:50、回复次数:6Top
1 楼shenleng(冷雪)回复于 2003-11-01 09:01:05 得分 10
首先将指向结构中的指针所指位置释放掉,也就是首先释放二重指针的内部指针,然后外部指针,最后释放结构指针。否则会出现内存泄漏Top
2 楼lypp(崆峒居士)回复于 2003-11-01 09:07:35 得分 0
能否寫出代碼。Top
3 楼lypp(崆峒居士)回复于 2003-11-01 09:46:59 得分 0
upTop
4 楼robbie24(独行虾)回复于 2003-11-01 09:59:17 得分 10
个人认为... 应该将IMGMOVEPROPERTY由类来实现,放在destructor中来释放. 因为如果IMGMOVEPROPERTY的对象一多,可能会有点忙不过来,我的意思是说,可能会忘记如此复杂的先去释放这个,再释放那个.(笑),甚至,根本就忘记释放了~
Top
5 楼Wolf0403(废人:独活十年~心如刀割)回复于 2003-11-01 10:19:23 得分 15
m_AnimatorClamp->szImgfileName = new char* [5];
for (int i = 0; i < 5; i++)
{
delete m_AnimatorClamp->szImgfileName[i];
}
delete m_AnimatorClamp;
因为 szImgfileName 不是在构造函数分配的,不知道究竟有几个字符串,所以没法用析构函数释放,除非在结构中保存字符串的数量信息.Top
6 楼wangbinru(彬哥)回复于 2003-11-01 11:28:05 得分 15
m_AnimatorClamp = new IMGMOVEPROPERTY在对上建立了对象,结束时要删除。
m_AnimatorClamp->szImgfileName = new char* [5];分配了一个具有5个元素的指针数组。每个元素只用来存储地址,它们分别指向由m_AnimatorClamp->szImgfileName[i] = new char[10];分配的空间,所以删除时应按相反的顺序:
for (int i = 0; i < 5; i++)
{
delete m_AnimatorClamp->szImgfileName[i];
}
delete m_AnimatorClamp->szImgfileName;
delete m_AnimatorClamp;
先删除m_AnimatorClamp->szImgfileName[i] = new char[10];分配的空间;
再删除m_AnimatorClamp->szImgfileName = new char* [5];分配的空间;
最后删除m_AnimatorClamp = new IMGMOVEPROPERTY; 分配的空间。Top



