new 是否能够初始化分配的内存空间

AA=new aa[MM];--d动态分配了一个大小为MM的结构体数组
我的问题是:用new分配的这块内存是否分配之后就被清空?
如果不是,如何清空这块内存?
memset(AA,'0',sizeof(aa[MM]));---我是这么做的,编译出错(error C2540: non-constant expression as array bound)
就是如何清空这块内存(我以为写入数字0是清空的意思)

第1个回答  2009-03-12
1.关于:“用new分配的这块内存是否分配之后就被清空?”
答案:没有。直到你为他赋值为止。
例如:
struct AA
{
int a;
};

void main()
{
AA *temp = new AA[3];
cout<<temp[0].a<<endl;

}

程序是可以执行的,但是输出值不确定的。

2.如果不是,如何清空这块内存?
结构我不知道初始化清空的方法。
如果是数组可以用以下的方法清空:

void main()
{
int a[4][5] = {{3,4}};

for(int i=0; i<4;i++)
{
cout<<"---------------"<<endl;
for(int j=0; j<5; j++)
cout<<a[i][j]<<endl;
}
}

从输出结果就可以看出,除了a[0][0]和a[0][1]数组的其他元素都被赋值为了0;
如果 int a[4][5] = {0};则可以将数组所有成员都赋值为0.
第2个回答  2009-03-12
memset(AA,'0', MM);
分配大小为MM,那memset里大小直接MM,不用sizeof
还有'0'是一个字符常量,不是数值0,不知道你本来就是要初始为字符0,还是数值0?
第3个回答  2009-03-12
标准-----memset(AA,0,sizeof(aa)*MM/sizeof(char))本回答被提问者采纳
第4个回答  2009-03-12
memset是全部弄为0 东西还是有只是为0了
相似回答