游戏开发论坛

 找回密码
 立即注册
搜索
12
返回列表 发新帖
楼主: pp123321

动态数组

[复制链接]

21

主题

53

帖子

55

积分

注册会员

Rank: 2

积分
55
 楼主| 发表于 2004-6-30 07:57:00 | 显示全部楼层

Re:动态数组

那该怎么做呢?因为在函数内我需要a的初始地址。

21

主题

53

帖子

55

积分

注册会员

Rank: 2

积分
55
 楼主| 发表于 2004-6-30 08:04:00 | 显示全部楼层

Re:动态数组

因为在函数内b等于a的初始地址,所以希望能够把b delete掉,却不能delete a,
望赐教!

30

主题

298

帖子

299

积分

中级会员

Rank: 3Rank: 3

积分
299
QQ
发表于 2004-6-30 12:18:00 | 显示全部楼层

Re:动态数组

要搞清楚一点,你delete掉的是你new的内存,只要delete了任意一个指向你new的内存块的指针,那么所有指向已经被delete的内存的指针就都变成非法指针了。
没有可能说两个指向同一个内存块的指针,通过其中一个指针释放了内存块,而另一个指针仍然有效。

21

主题

53

帖子

55

积分

注册会员

Rank: 2

积分
55
 楼主| 发表于 2004-7-1 10:26:00 | 显示全部楼层

Re:动态数组

如是,那么b有必要清除吗?不是说指针变量也占用内存吗?

4

主题

61

帖子

61

积分

注册会员

Rank: 2

积分
61
发表于 2004-7-1 10:35:00 | 显示全部楼层

Re:动态数组

你要弄明白指针和内存的区别,不用的指针把它赋为null

30

主题

298

帖子

299

积分

中级会员

Rank: 3Rank: 3

积分
299
QQ
发表于 2004-7-1 11:57:00 | 显示全部楼层

Re:动态数组

不需要对b进行删除,也无法删除b,因为b是由编译器在栈中分配的空间,在b的有效域结束之后,b的空间自然就会被回收。
但你new的内存块是在堆中,你不释放它,就会造成memory leak。

89

主题

4036

帖子

4132

积分

论坛元老

Rank: 8Rank: 8

积分
4132
发表于 2004-7-1 14:01:00 | 显示全部楼层

Re:动态数组

这么基础的问题。应该任何一本书上都有讲的吧?

30

主题

298

帖子

299

积分

中级会员

Rank: 3Rank: 3

积分
299
QQ
发表于 2004-7-1 14:23:00 | 显示全部楼层

Re:动态数组

虽然都是基础的东西,可是仍然有人不懂。只好给他补补课了。:)
但也就是因为是基础的东西,有很多人就不仔细的看,才导致问出这种基础的问题。

21

主题

53

帖子

55

积分

注册会员

Rank: 2

积分
55
 楼主| 发表于 2004-7-1 14:36:00 | 显示全部楼层

Re:动态数组

衷心感谢!!!

36

主题

1047

帖子

1147

积分

金牌会员

Rank: 6Rank: 6

积分
1147
发表于 2004-7-2 17:58:00 | 显示全部楼层

Re:动态数组

要分清楚指针变量和指针所指向的内存的区别,指向指针的变量是分配在stack 中,当离开他的作用域时就会被自动销毁,但是它所指向的内存不会被自动销毁,需要你来释放,最好在开发过程中将最初始指针用来创建和销毁内存,其他访问这块内存的指针不要作为释放,这样可以避免很多麻烦,有很多时候程序的内存泄漏问题是由于指针的无规则使用造成的,搂住遇到的情况就是典型的例子。
A * pA = new A; // pA 作为创建和销毁内存之用
....
A * pA1 = pA;    // pA1 这样的指针用作访问上面分配的内存之用
...
...
delete pA1;      // 尽量不要这样做
.....
SAFE_DELETE( pA ); // 最好这样

总之要分清指针职责,这样可以避免很多内存泄漏问题。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-7-3 02:33

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表