int ***m = new int**[strLen];
for (int i = 0; i < strLen; i++)
m[i] = new int*[strLen];
for (int i = 0; i < strLen; i++)
for (int j = 0; j < strLen; j++)
m[i][j] = new int[3];
memset的两种写法:
1. memset(m, 0, sizeof(int)*strLen*strLen*3);
2. memset(m, 0, sizeof(m));
那种是正确的???
两个方法都不对
如果你希望清除m这个数组(每个下标指向null),用
memset(m, 0, sizeof(m) * sizeof(int **));
在此之前需要delete里面的二维数组,否则内存泄漏
如果你希望清除全部的元素
for (int i = 0; i < strLen; i++)
for (int j = 0; j < strLen; j++)
memset(m[i][j], 0, sizeof(m[i][j]) * sizeof(int));
你这里面涉及到三块内存空间,你想memset哪一块
int ***m = new int**[10]; for (int i = 0; i < 10; i++) { m[i] = new int*[10]; } for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { m[i][j] = new int[3]; } } for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { for (int k = 0; k < 3; k++) { printf("m[%d][%d][%d]:%p\n", i, j, k, &m[i][j][k]); } } }
> memset(m[i][j],0,sizeof(int)*3);
int ***m = new int**[10]; for (int i = 0; i < 10; i++) { m[i] = new int*[10]; } for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { m[i][j] = new int[3]; } } for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { for (int k = 0; k < 3; k++) { printf("m[%d][%d][%d]:%p\n", i, j, k, &m[i][j][k]); } } }
> * memset是按字节连续填充的,大一的时候做过实验,memset(m[i][j],1,sizeof(int)*3);结果就不是1,当时还纠结了很久。 * 所以希望清除全部元素,就像caozhy那样,利用循环逐个清除吧。 * 循环体要写成下面这种形式,我打印sizeof(m[0][0])和sizeof(int)都是4,3个int应该是12字节。 memset(m[i][j],0,sizeof(int)*3);