首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

关于指针是否释放有关问题

2012-02-04 
关于指针是否释放问题。 {char*pt1strstr(soustr,findstr)char*pt2StrScan(pt1, )AnsiStringstrKeyM

关于指针是否释放问题。

{
                char   *pt1=strstr(soustr,findstr);
                char   *pt2=StrScan(pt1, '; ');
                AnsiString   strKey=MidStr(pt1,1,(pt2-pt1));
}
上面的例子,我的pt1,与pt2的指针是否要释放?

delete   pt1,还是   free(pt1),pt1=NULL.或者   什么?
我在执行   delete   pt1会出错误。


[解决办法]
不用

new--delete
malloc--free
[解决办法]
指针是没有办法释放的
[解决办法]
只有动态分配的才要释放
[解决办法]
不用,如果你用
char *a = new char[10];
则须要用
delete [] a;
来删除
[解决办法]
应该不会,
[解决办法]
不用释放了.


另外。 最上面
String str=“abcd”
char *pt2=StrScan(str, 'c ');
我这样写,pt2是否会在程序中一直存在,是否我执行完后是否需要执行一下pt2=NULL;
我对str进行了操作的话,pt2会有影响吗?
不会给程序造成什么影响吗?

会对pt2有影响. 因为pt2指向str中 'c '的地址,



[解决办法]
函数返回对指针一般不用释放. 除非极个别的API.如果返回的指针需要释放, 本身就不是好的设计
[解决办法]
大家说了这么多 我来说一点我的观点
为什么函数指针 以及 char *不需要释放

{
int i = 0; //int 变量
char *p = "hello "; //字符串指针
void(*function)(); //函数指针
}

花括号内定义的这些变量 和 指针 都栈区的
出了花括号 这些变量都不可访问了
栈区会自行将内存 "释放 "
{
Tclass *p = new Tclass();
delete p;
}

p指针变量 是在栈区的 只不过,指针的值 是一块堆内存地址

在堆上分配的内存 是需要释放的,对于c++ 必须程序员自己主动释放 系统不会自己回收

至于函数,应该是放在代码区
代码区是怎么释放的 我尚不清楚
但是函数指针 依然是在栈上:)


[解决办法]
int * aaa=new int(OWner指针)
delete(aaa)
动态创建最关键就是处理好指针与内存,如果不释放内存会造成内存泄露
原则: 无论是在哪儿,凡是new了的 就要我们自己去delete.
[解决办法]
ls的不全对
如Socket::SendStream这个就是:
TStream *Stream = new TMemoryStream;
Stream-> Write( "12345678 ",6);
Socket1-> SendStream(Strwam);
//在这里delete Stream是绝对不能使用的
也有不new而需要释放的:
AnsiString *P = AllocString();
delete P;//这是需要的

热点排行