提两个问题
1.在以下使用new和delete运算符进行动态内存分配和释放的语句中,错误的是:
A. char*p=new char[10];
delete[]p;
B. char*p=new char[10];
if(p)
delete[]p;
C. char*p=NULL;
delete p;
p=new char[10];
delete[]p;
D. char*p;
delete p;
2. new运算符每次只能分配一个单位的存储空间吗???
问题点数:0、回复次数:4Top
1 楼XueBoy163(菜刀之恋)回复于 2003-02-03 16:10:48 得分 0
失败返回NULL。B正确Top
2 楼zhangdf96(zhangdf)回复于 2003-02-03 16:45:38 得分 0
1、错误的是D
因为new失败后返回NULL,delete可以对NULL操作,实际上什么也不做。
A、B、C的delete要么对NULL操作,要么对正常分配的内存操作,都没有问题,
但是D是对一个没有初始化的指针进行操作,后果无法预料。
2、不是,new实际上会调用类的构造函数,根据传入的参数来决定分配多少内存,这个参数可以是显式的,也可能是隐式的。例如:
char * p = new char[20];//显式的,分配20个char大小的空间
struct A
{
int i;
long l;
char c;
};
struct A* pA = new struct A;//隐式的,分配sizeof(A)大小的空间
class Class
{
public:
int i;
long l;
};
Class * pClass = new Class();//隐式的,分配sizeof(Class)大小的空间Top
3 楼zhaolaoxin()回复于 2003-02-03 17:47:21 得分 0
zhangdf96(zhangdf) 说的对Top
4 楼duduwolf(嘟嘟狼)回复于 2003-02-03 17:50:10 得分 0
d错,d只是定义了一个char类型的指针,并没有分配任何内存单元Top




