返回信息流//创建动态二维数组
int m=4;
int n=2;
int **a= new int*[m];
for(int i=0;i<m;i++)
a[i] = new int [n];
//将二维是数组所有值赋零
memset(a,0,sizeof(int)*4*2);
//输出所有数组值
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
//我发现是memset的问题,如果不用memset给数组赋值,后来的循环输出//
//就不会出问题,请问这是为什么啊?
这是一条镜像帖。来源:北邮人论坛 / cpp / #12959同步于 2008/9/23
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
求教一个关于memset的问题,下面的程序出错,请问是为什么啊?
sanxiake
2008/9/23镜像同步7 回复
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
【 在 sanxiake 的大作中提到: 】
: //将二维是数组所有值赋零
: memset(a,0,sizeof(int)*4*2);
: ...................
a不是二维数组,是指针数组
a不是只想二位数组的头地址 ,而且你现在创建的二位数组 每2个数的地址是相邻的。
而memset(a,0,sizeof(int)*4*2); 会出错是因为a是指针的指针,a指向的地址没有被初始化,所以崩溃
可以memset(*a,0,sizeof(int)*2);
memset(*(a + 1), 0, sizeof(int)*2);
memset(*(a + 2), 0, sizeof(int)*2);
memset(*(a + 3), 0, sizeof(int)*2);
*a,*(a+1)...就是实际4个包含2个int型整数的一维数组的图地址。
LS正解,你用循环申请的内存是不连续的,不能用memset一次赋值,可以用这个方式申请二维数组:
A** ga = new A*[m];
ga[0] = new A[m*n];
for(int i = 1; i < m; i++)
ga[i] = ga[i-1]+n;
...
delete [] ga[0];
delete [] ga;
这样就能直接用一个memset初始化了