| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 936 人关注过本帖
标题:弱弱的问个NULL的基本问题
只看楼主 加入收藏
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
收藏
得分:0 

呵呵
二楼说的是没错
我是说二楼好象马虎了
没有看到楼主问题所在
当然二楼说的我们也会注意的
当你定义了一个指针,编译器就给她分配内存了!!!

嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX  Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP
2006-04-16 13:04
zhipeng0117
Rank: 1
等 级:新手上路
帖 子:71
专家分:0
注 册:2005-9-15
收藏
得分:0 

两位说的都是对的,好像是我没把问题讲清楚吧
int* p;
delete p;//会出错(其实没有new就不用释放,对吧?)

int* p;
p=new int[n];
delete p;//是正确的
所以在最后delete时需要确定是否对指针作过new,即确定是否要用delete释放他。

我的程序是用递归的方法释放动态分配的内存,种植条件就是最后一个指针没有被动态分配内存。
可能罗嗦了点,但是我想不到其他方法,问题还没有解决阿


2006-04-16 19:52
巧克力饼干
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2006-3-27
收藏
得分:0 
你说的好象还是有错...
首先 动态分配内存 的new 和delete 是成对出现的
所以 没有new 就谈不上 delete 释放内存;
其次 new 动态分配内存 包括 int* p = new int()和 int* = new int[] 两中方式
所以 delete 的释放也应该是 delete p 或者是 delete [] p;
你的问题把你写的代码发上来看看...你这么说.没人明白你问题出在哪...
2006-04-16 22:15
myajax95
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:30
帖 子:2978
专家分:0
注 册:2006-3-5
收藏
得分:0 
1.变量声明了系统就会给分配内存。你定义了int* p,系统就分配出这么块地方来存它,不过记住,这块地方只是个存地址形指针的地方,大小为sizeof(int *),跟你以后new得到一个int还是int array,还是什么的没有任何关系。到这里系统是不会管这些的。像这样定义在函数头定义的变量是存在执行程序的堆栈中的。

2.像大部份C语言中的基本变量类型一样,定义完一个指针之后,系统是不负责帮助初始化的(除非是static)。你如果定义了一个float f;那么这个f就是一个无法预知的数字,你必须自己初始化这个f。同样指针int* p定义了之后也应该初始化,否则系统给p随便指一个地方,用到的时候立刻crash。应一上来就写上int *p = NULL,或者int *p = new ....

3.编程序时不给指针初始化是个极坏的习惯。应该杜绝。

4.delete之前判断p是否为空是个正确的操作,虽然没有必要(delete 会替你作的)。

5。当你的函数结束或整个程序结束的时候你需要自己清理内存。在函数中定义的变量存在执行程序的堆栈中,会随着函数的结束自动被系统用destructor清理掉。所有new 出来的是存在heap(不知这词怎么翻译)中的。你需要作与之响应的delete。

6。在C++中可以用smart pointer,查查相关书籍应该能找到,smart pointer会帮你自动管理很多哪存,使你的指针用起来没这么麻烦。

http://myajax95./
2006-04-17 03:20
dianpozi
Rank: 1
等 级:新手上路
帖 子:65
专家分:0
注 册:2004-10-31
收藏
得分:0 
真是长见识了1!!··
2006-04-18 13:27
快速回复:弱弱的问个NULL的基本问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024410 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved