结构体中的char *index 需要单独delete吗?

welcome008
结构体中的char *index 需要单独delete吗?

看到一部分代码如下:
#include<iostream>
#include<string.h>
using namespace std;

struct vecelem {
        char *index;
        int  value;
};

class assocvec {
        vecelem * elems;
        int dim;
        int used;
    public:
        assocvec(int dim_d);
        ~assocvec();
        int & operator [] (char *idx) ;
        void print();
};
assocvec::assocvec(int dim_d) {
        dim = dim_d;
        used = 0 ;
        elems = new vecelem[dim] ;
}
assocvec::~assocvec() {
        for( int j = 0 ; j < used ; j++)
                delete elems[j].index ;
        delete elems ;
}

为什么要对elems[j].index单独delete?
而且没有显示的new与那个delete匹配啊。

Smeagol
index是指针类型,指向堆中新开辟的空间,如果不先清空index而直接清空elems,就会造成内存泄露,因为index指针被清掉了,但是内存还占用着。

welcome008
可是好像并不是所有的char *类型都有delete啊?为什么?

Smeagol
这要取决于你是否给这个char *类型动态分配了空间的。

welcome008
[quote]原帖由 [i]Smeagol[/i] 于 2008-6-19 17:37 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8622164&ptid=1164876][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
这要取决于你是否给这个char *类型动态分配了空间的。 [/quote]


可是这里也并没有动态给那个变量分配空间啊。没有专门的new配合它啊。

welcome008
我觉得在这里就和
char *ind;
*ind = "abc";
是一样的。

Smeagol
有使用这个类的代码吗?

Smeagol
[quote]原帖由 [i]welcome008[/i] 于 2008-6-19 17:46 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8622241&ptid=1164876][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
我觉得在这里就和
char *ind;
*ind = "abc";
是一样的。 [/quote]

建议还是先在坛子上搜索一下吧,一两句说不太清楚,记得坛子上有详细的说明。

ruoyisiyu
char *index仅仅是一个指针,释放空间是指释放指针指向的malloc空间,而不是所谓的指针,这点一定要搞清楚
指针可以指向堆,也可以指向栈,就看你怎么样用了

scutan
如果你没有对它进行new,则不需要delete。

zszjxh
[quote]原帖由 [i]welcome008[/i] 于 2008-6-19 17:46 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8622241&ptid=1164876][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
我觉得在这里就和
char *ind;
*ind = "abc";
是一样的。 [/quote]
这代码是错的:
应:char *ind;
ind = "abc";

welcome008
[quote]原帖由 [i]scutan[/i] 于 2008-6-19 20:17 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8622766&ptid=1164876][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
如果你没有对它进行new,则不需要delete。 [/quote]


但这里为什么会对数组的每个元素单独delete呢,又没有单独new它。

lewphee
如果结构里的指针没有被malloc或new,则不用free或delete
很简单的道理,你都没分配内存,你delete什么呀?

ideawu
需要的.

welcome008
晕了