继续我的c++语法,,,二维数组的动态创建和释放
2011-06-25 21:44
302 查看
从csdn的帖子上看过来的。
from:http://topic.csdn.net/t/20040629/21/3132646.html
总结:
对于二维数组的动态分配与释放
首先,动态支持数组的分配,必须用 new 来进行创建一段堆内存,其它的存贮区域不允许动态分配的产生。
其次,C++并没有提供真正的动态多维数组语法,想动态分配数组,必须通过一维动态数组组合形成一个类似多维数组的存贮形式,并不像静态分配多维数组,它们的用法虽说有些地方有相似之处,但不完全相同。
再次,有些网友有一些很BT的分配方式。
例如:
int (*p)[4] = new int[3][4];
解释:可能有些初学者认为这样是可取的,也是利用 new 分配的数组,就可以是动态的,那你的想法就错了,它的分配必须得有最外层 const 的支持—
int x = 3, y = 4;
int (*p)[y] = new int[x][y];//error,y必须是const。
所以这种方式不能达到真正的动态分配二维数组的目的,只能相当于半自动化的一个分配方式。
那么如果依靠下面的这种方式是正确的:
例:
int x = 3, y = 4;
int **p = new int*[x];//创建一个动态 int* 型数组
for (int i = 0; i < y; ++i)
p[i] = new int [x]; //再创建一个动态 int 型数组
for (int i = 0; i < y; ++i)
{
delete p[i];//由里至外,进行释放内存。
p[i] = NULL;//不要忘记,释放空间后p[i]不会自动指向NULL值,还将守在原处,只是释放内存而已,仅此而已。
}
delete []p;
p = NULL;
它就是依靠一维数组的组合来完成,这样创建的动态数组就是一个全自动的个分配方式。
例(完美废人提供):
void * buf = malloc (x * y * sizeof (int) ); //这也是一个好方法,简单方便,但它是C里面的分配方式。
free(buf);//释放内存简单方便.
提示:千万不要有 int *p = new int[4][2]; 这样的错误写法。
from:http://topic.csdn.net/t/20040629/21/3132646.html
总结:
对于二维数组的动态分配与释放
首先,动态支持数组的分配,必须用 new 来进行创建一段堆内存,其它的存贮区域不允许动态分配的产生。
其次,C++并没有提供真正的动态多维数组语法,想动态分配数组,必须通过一维动态数组组合形成一个类似多维数组的存贮形式,并不像静态分配多维数组,它们的用法虽说有些地方有相似之处,但不完全相同。
再次,有些网友有一些很BT的分配方式。
例如:
int (*p)[4] = new int[3][4];
解释:可能有些初学者认为这样是可取的,也是利用 new 分配的数组,就可以是动态的,那你的想法就错了,它的分配必须得有最外层 const 的支持—
int x = 3, y = 4;
int (*p)[y] = new int[x][y];//error,y必须是const。
所以这种方式不能达到真正的动态分配二维数组的目的,只能相当于半自动化的一个分配方式。
那么如果依靠下面的这种方式是正确的:
例:
int x = 3, y = 4;
int **p = new int*[x];//创建一个动态 int* 型数组
for (int i = 0; i < y; ++i)
p[i] = new int [x]; //再创建一个动态 int 型数组
for (int i = 0; i < y; ++i)
{
delete p[i];//由里至外,进行释放内存。
p[i] = NULL;//不要忘记,释放空间后p[i]不会自动指向NULL值,还将守在原处,只是释放内存而已,仅此而已。
}
delete []p;
p = NULL;
它就是依靠一维数组的组合来完成,这样创建的动态数组就是一个全自动的个分配方式。
例(完美废人提供):
void * buf = malloc (x * y * sizeof (int) ); //这也是一个好方法,简单方便,但它是C里面的分配方式。
free(buf);//释放内存简单方便.
提示:千万不要有 int *p = new int[4][2]; 这样的错误写法。
相关文章推荐
- C/C++中动态创建和释放二维数组的两种办法
- c++动态二维数组创建与释放!
- C++版一维数组和二维数组的动态创建与释放
- 数据结构-C++描述:动态创建和释放一个二维数组
- C++\V动态创建和释放二维数组
- c/c++ 动态创建与释放二维数组
- VS2012 c++动态定义二维数组及释放
- C++动态二维数组内存的分配和释放 opencv
- C++ 创建动态二维数组
- c++のstatic静态成员、对象的动态创建和释放
- c++动态创建二维数组
- C++动态创建二维数组,二维数组指针
- c\c++二维数组动态分配和释放
- C++动态创建二维数组,memset()初始化二维数组
- C++中动态申请二维数组并释放方法
- C++如何动态创建二维数组
- C++:数组动态创建与释放
- C++动态创建二维数组和清空cin缓冲
- C++ 动态创建二维数组(转载)
- C++动态创建二维数组