`
lizhenqi19890218
  • 浏览: 1830 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

C/C++动态二维数组的内存分配和释放

阅读更多
C语言
[cpp] view plaincopy
//二维数组动态数组分配和释放 
//数组指针的内存分配和释放 
//方法一 
char (*a)[N];//指向数组的指针 
a = (char (*)[N])malloc(sizeof(char [N]) * m); 
 
free(a);  
 
//方法二 
char **a; 
int i; 
a = (char **)malloc(sizeof(char *) * m);//分配指针数组 
for(i=0; i<m; i++) 
    a[i] = (char *)malloc(sizeof(char) * n);//分配每个指针所指向的数组 
 
for(i=0; i<m; i++) 
    free(a[i]); 
free(a);  
 
//方法三 
char **a; 
int i; 
a = (char **)malloc(sizeof(char *) * m);//分配指针数组 
a[0] = (char *)malloc(sizeof(char) * m * n);//一次性分配所有空间 
for(i=1; i<m; i++) 
    a[i] = a[i-1] + n; 
 
free(a[0]); 
free(a);  
 
 
//指针数组的内存分配和释放 
//方法一 
char* a[M];//指针的数组 
int i; 
for(i=0; i<M; i++) 
    a[i] = (char *)malloc(sizeof(char) * n); 
 
for(i=0; i<M; i++) 
    free(a[i]);  
 
//方法二 
char* a[M];//指针的数组 
int i; 
a[0] = (char *)malloc(sizeof(char) * M * n); 
for(i=1; i<M; i++) 
    a[i] = a[i-1] + n; 
 
free(a[0]);  

C++
[cpp] view plaincopy
//二维数组动态数组分配和释放 
//数组指针的内存分配和释放 
//方法一 
char (*a)[N];//指向数组的指针 
a = new char[m][N]; 
 
delete[] a;  
 
//方法二 
char **a; 
a = new char* [m];//分配指针数组 
for(int i=0; i<m; i++) 
    a[i] = new char[n];//分配每个指针所指向的数组 
 
for(i=0; i<m; i++) 
    delete[] a[i]; 
delete[] a;  
 
 
//指针数组的内存分配和释放 
//方法一 
char **a; 
a = new char* [m]; 
a[0] = new char[m * n];//一次性分配所有空间 
for(int i=1; i<m; i++) 
    a[i] = a[i-1] + n;//分配每个指针所指向的数组 
 
delete[] a[0]; 
delete[] a;  
 
//方法二 
char* a[M];//指针的数组 
for(int i=0; i<M; i++) 
   a[i] = new char[n]; 
 
for(i=0; i<M; i++) 
   delete[] a[i];  
 
//方法三 
char* a[M];//指针的数组 
a[0] = new char[M*n]; 
for(int i=1; i<M; i++) 
    a[i] = a[i-1] + n; 
 
delete[] a[0]; 


注意:
new和delete要注意配对使用,即有多少个new就有多少个delete,这样才可以避免内存泄漏!



来源:http://blog.csdn.net/huazhigang/article/details/11745551
分享到:
评论

相关推荐

    c/c++ 学习总结 初学者必备

    def是一个二级指针,它指向的是一个一维数组的指针,数组的元素都是float. (2)double*(*gh)[10]; gh是一个指针,它指向一个一维数组,数组元素都是double*. (3)double(*f[10])(); f是一个数组,f有10个元素,元素都是...

    谭浩强C语言程序设计,C++程序设计,严蔚敏数据结构,高一凡数据结构算法分析与实现.rar

    7.2 二维数组的定义和引用 86 7.2.1 二维数组的定义 86 7.2.2 二维数组元素的引用 86 7.2.3 二维数组的初始化 87 7.2.4 二维数组程序举例 89 7.3 字符数组 89 7.3.1 字符数组的定义 89 7.3.2 字符数组的初始化 89 ...

    谭浩强C语言程序设计,C++程序设计,严蔚敏数据结构,高一凡数据结构算法分析与实现.rar )

    7.2 二维数组的定义和引用 86 7.2.1 二维数组的定义 86 7.2.2 二维数组元素的引用 86 7.2.3 二维数组的初始化 87 7.2.4 二维数组程序举例 89 7.3 字符数组 89 7.3.1 字符数组的定义 89 7.3.2 字符数组的初始化 89 ...

    《C++算法程序设计》

    大家好!现在我们将要开始一个穿越“数据...• 一维和二维数组的动态分配与释放。 • 求解二次方程。 • 生成n 个元素的所有排列方式。 • 寻找n个元素中的最大值。 此外,本章还给出了如何测试和调试程序的一些技巧。

    数据结构与算法C++版

    第1章 C + +程序设计 ...• 一维和二维数组的动态分配与释放。 • 求解二次方程。 • 生成n 个元素的所有排列方式。 • 寻找n个元素中的最大值。 此外,本章还给出了如何测试和调试程序的一些技巧。

    你必须知道的495个C语言问题

    6.18 当我向一个接受指针的指针的函数传入二维数组的时候,编译器报错了。 6.19 我怎样编写接受编译时宽度未知的二维数组的函数? 6.20 我怎样在函数参数传递时混用静态和动态多维数组? 数组的大小 6.21 当...

    《你必须知道的495个C语言问题》

    书中列出了C用户经常问的400多个经典问题,涵盖了初始化、数组、指针、字符串、内存分配、库函数、C预处理器等各个方面的主题,并分别给出了解答,而且结合代码示例阐明要点。 《你必须知道的495个C语言问题》结构...

    C语言FAQ 常见问题列表

    o 7.15 当我向一个接受指针的指针的函数传入二维数组的时候, 编译器报错了。 o 7.16 我怎样编写接受编译时宽度未知的二维数组的函数 ? o 7.17 我怎样在函数参数传递时混用静态和动态多维数组 ? o 7.18 当数组...

    你必须知道的495个C语言问题(PDF)

    然后又使用一些内存分配技巧使namestr 数组用起 来好像有多个元素。这样合法和可移植吗? . . . . . . . . . . . . 8 2.7 是否有自动比较结构的方法? . . . . . . . . . . . . . . . . . . . . 8 2.8 如何向接受...

    java基础入门教程

    最 近 一 年 多 来 ,在 Internet上 出 现 的 特 别 吸 引 人 的 事 件 就是 Ja va语 言 和 用 Java编 写 的 浏 览 器 HotJava。 1991年 ,SUN MicroSystem 公 司 的 Jame Gosling、 Bill Joe等 人 , 为 在电视 、 ...

    语言程序设计课后习题答案

    C++是一个更好的C,它保持了C的简洁、高效、接近汇编语言、具有良好的可读性和可移植性等特点,对C的类型系统进行了改革和扩充,因此C++比C更安全,C++的编译系统能检查出更多的类型错误。 C++语言最重要的特点是...

Global site tag (gtag.js) - Google Analytics