C/C++动态二维数组的内存分配和释放
C语言:
1 //二维数组动态数组分配和释放
//数组指针的内存分配和释放
//方法一
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=; i<m; i++)
a[i] = (char *)malloc(sizeof(char) * n);//分配每个指针所指向的数组 for(i=; i<m; i++)
free(a[i]);
free(a); //方法三
char **a;
int i;
a = (char **)malloc(sizeof(char *) * m);//分配指针数组
a[] = (char *)malloc(sizeof(char) * m * n);//一次性分配所有空间
for(i=; i<m; i++)
a[i] = a[i-] + n; free(a[]);
free(a); //指针数组的内存分配和释放
//方法一
char* a[M];//指针的数组
int i;
for(i=; i<M; i++)
a[i] = (char *)malloc(sizeof(char) * n); for(i=; i<M; i++)
free(a[i]); //方法二
char* a[M];//指针的数组
int i;
a[] = (char *)malloc(sizeof(char) * M * n);
for(i=; i<M; i++)
a[i] = a[i-] + n; free(a[]);
C++:
1 //二维数组动态数组分配和释放
//数组指针的内存分配和释放
//方法一
char (*a)[N];//指向数组的指针
a = new char[m][N]; delete[] a; //方法二
char **a;
a = new char* [m];//分配指针数组
for(int i=; i<m; i++)
a[i] = new char[n];//分配每个指针所指向的数组 for(i=; i<m; i++)
delete[] a[i];
delete[] a; //指针数组的内存分配和释放
//方法一
char **a;
a = new char* [m];
a[] = new char[m * n];//一次性分配所有空间
for(int i=; i<m; i++)
a[i] = a[i-] + n;//分配每个指针所指向的数组 delete[] a[];
delete[] a; //方法二
char* a[M];//指针的数组
for(int i=; i<M; i++)
a[i] = new char[n]; for(i=; i<M; i++)
delete[] a[i]; //方法三
char* a[M];//指针的数组
a[] = new char[M*n];
for(int i=; i<M; i++)
a[i] = a[i-] + n; delete[] a[];
注意:
new和delete要注意配对使用,即有多少个new就有多少个delete,这样才可以避免内存泄漏!
C/C++动态二维数组的内存分配和释放的更多相关文章
- 以杨辉三角为例,从内存角度简单分析C语言中的动态二维数组
学C语言,一定绕不过指针这一大难关,而指针最让人头疼的就是各种指向关系,一阶的指针还比较容易掌握,但一旦阶数一高,就很容易理不清楚其中的指向关系,现在我将通过杨辉三角为例,我会用四种方法从内存的角度简 ...
- C++动态二维数组的创建
两种方式. 一,二级指针,创建2行3列的动态二维数组. 这里,p指向的是2个地址,这两个地址各指向长度为3的一维整型数组. 在内存中,每行元素内部顺序排列.两行元素的首地址不同,p[1]与p[2]存放 ...
- C语言批量数据到动态二维数组
上一篇文章将文件读取放到静态创建的二维数组中,可是结合网络上感觉到今天的DT时代,这样批量大量读取一个上百行的数据,分配的内存是否可能由于大量的数据而产生溢出呢,近期一直研究里malloc函数.通过它 ...
- C++ 里 构建动态二维数组
//****动态二维数组 /* int m=3; int **data; int n=2; data=new int*[m]; for(int j=0;j<m;j++) { data[j]=ne ...
- C++建立动态二维数组
C++建立动态二维数组主要有两种方法: 1.使用数组指针,分配一个指针数组,将其首地址保存在b中,然后再为指针数组的每个元素分配一个数组 int * ...
- 动态二维数组赋值及for循环遍历和toString遍历
package com.Summer_0421.cn; import java.util.Arrays; /** * @author Summer * 动态二维数组赋值及for循环遍历和toStrin ...
- 【C/C++】vector 动态二维数组
声明 vector<vector<int> vec; //赋值思路可以从这个很基础的操作里看出来 vector<int> a; a.push_back(1); a.pus ...
- C++ 用 new 生成一个动态二维数组
//Microsoft Visual Studio 2015 Enterprise //变长二维数组 #include <iostream> #include<iomanip> ...
- C#动态二维数组输出
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Cons ...
随机推荐
- python:post请求业务、调用微信api监控业务
vim post.py #!/usr/bin/env python # -*- coding: utf-8 -*- import json import os import datetime impo ...
- 【实验吧】因缺思汀的绕过&&拐弯抹角&&Forms&&天网管理系统
<?php error_reporting(); if (!isset($_POST['uname']) || !isset($_POST['pwd'])) { echo '<form a ...
- Java-终止应用程序
参考了:http://www.cnblogs.com/xwdreamer/archive/2011/01/07/2297045.html 理论在上面链接中有详细的解释 package com.tj; ...
- Palindrome Names
Palindrome Names Kattis - names Anna and Bob are having a baby. They both enjoy the advantage of hav ...
- javascript前端下载
<html> <head> <title>测试标题</title> </head> <body> <div> 测试页 ...
- 在LoadRunner向远程Linux/Unix执行命令行并收集性能数据
前面介绍过在LoadRunner的Java协议实现“使用SSH连接Linux”,当然连接之后的故事由你主导. 今天要讲的,是一个非Java版本.是对“在LoadRunner中执行命令行程序之:pope ...
- 查询UNDO使用情况
查看UNDO事务占用情况 SELECT s.username, s.sid, pr.PID, s.OSUSER, s.MACHINE, s.PROGRAM, rs.segment_id, r.usn, ...
- iOS学习笔记06-手势识别
一.UIGestureRecognizer简单介绍 我们已经学习了触摸事件处理,但触摸事件处理起来很麻烦,每个触摸事件处理都需要实现3个touches方法,比较繁琐,实际上我们可以使用更加简单的触摸事 ...
- 【Luogu】P2324骑士精神(IDA*)
题目链接 当guess>limit-deep的时候return就好了. guess是估价函数,值为不在自己地盘上的骑士个数.limit是本次迭代阈值.deep是已经走了多少步. 这个优化是显然的 ...
- 【单调队列+尺取】HDU 3530 Subsequence
acm.hdu.edu.cn/showproblem.php?pid=3530 [题意] 给定一个长度为n的序列,问这个序列满足最大值和最小值的差在[m,k]的范围内的最长子区间是多长? [思路] 对 ...