funfun兄的不对!int** p = (int**)malloc(sizeof(int*)*rows);for (int i = 0; i < rows; i++) { p[i] = (int*)malloc(sizeof(int)*cols);}或者int (*p)[cols] = (int(*)[cols])malloc(sizeof(int)*rows*cols);下面的方法节省了rows个指针的内存...
sarrow [ 4 楼 ]
2006-05-31 23:50:00
不过,下面的方法,在低级的C编译器中可能不被支持...
格子裙 [ 5 楼 ]
2006-06-01 00:19:00
(转)C++中二维数组new小结 二维数组new小结 转至水木清华 1. A (*ga)[n] = new A[m][n]; ... delete []ga;缺点:n必须是已知 优点:调用直观,连续储存,程序简洁(经过测试,析构函数能正确调用)2. A** ga = new A*[m]; for(int i = 0; i < m; i++) ga[i] = new A[n]; ... for(int i = 0; i < m; i++) delete []ga[i]; delete []ga;缺点:非连续储存,程序烦琐,ga为A**类型 优点:调用直观,n可以不是已知3. A* ga = new A[m*n]; ... delete []ga;缺点:调用不够直观 优点:连续储存,n可以不是已知4. vector<vector<A> > ga; ga.resize(m); //这三行可用可不用 for(int i = 1; i < n; i++) // ga[i].resize(n); // ...缺点:非连续储存,调试不够方便,编译速度下降,程序膨胀(实际速度差别不大) 优点:调用直观,自动析构与释放内存,可以调用stl相关函数,动态增长5. vector<A> ga; ga.resize(m*n);方法3,4的结合6. 2的改进版(Penrose提供,在此感谢) 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;缺点:程序烦琐,ga为A**类型 优点:连续储存,调用直观,n可以不是已知
sarrow [ 6 楼 ]
2006-06-01 00:31:00
6. 2的改进版(Penrose提供,在此感谢) 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;比较搞笑的用法...