C/C++,JAVA中的动态内存申请
摘 要: 本文总结了c/c++,java 中的动态内存申请用法;
关键词:c/c++,java,动态内存申请
1. 引 言... 1
2. C语言... 1
2.1 三个表达式... 1
2.2 三个函数... 1
2.2.1 malloc. 1
2.2.2 calloc. 2
2.2.3 free. 3
3 C++. 3
4 JAVA. 4
5结论... 4
动态内存申请平时不怎么用,导致要用时一时手足无措,现总结如下;
C的动态内存申请是最基础的,当然也是最晦涩,最复杂的,这一切都要拜那个神奇的指针所赐。
int p1[][5];
int (*p2)[5];
int* p3[5];
以上三个表达式个代表什么意思呢?其实前两个是一样的,都是指一个指针,指向5个整形的一维数组,而第三个是一个指针数组,5个元素,每个元素是一个整形指针;当然如果你对指针和数组的概念充分熟悉的话,其实这三个也是“一样的”,想想
int a[5];
int* p;
p = a;
这个例子好了;
2.2 三个函数
2.2.1 malloc
贴上代码:
#include<stdio.h>
#include<stdlib.h>
const int R = 4;
const int C = 5;
int main() {
int** p;
int i=0, j=0;
p = (int**) malloc(sizeof(int*) * R);
for(i=0; i<R; ++i) {
p[i] = (int*)malloc(sizeof(int) *C);
}
/*
for(i=0; i<R; ++i) {
for(j=0; j<C; ++j) {
p[i][j] = 0;
}
}
*/
for(i=0; i<R; ++i) {
for(j=0; j<C; ++j) {
printf("%d/t",p[i][j]);
}
printf("/n");
}
for(i=0; i<R; ++i) {
free(p[i]);
}
free(p);
}
malloc对所分配的内存块不做任何事情,这个下面的calloc有区别,所以最好把我注释掉的那两层for放出来;
2.2.2 calloc
贴上代码:
#include<stdio.h>
#include<stdlib.h>
const int N = 4;
int main() {
int* p;
int i=0;
p = (int*) calloc(N, sizeof(int));
for(i=0; i<N; ++i) {
printf("%d/t",p[i]);
}
printf("/n");
free(p);
}
说明两点:
1. calloc出来的是有初始值的,如上面的都是0;
2. 其实
int* p = (int*) malloc(sizeof(int)*N);
for(int i=0; i<N: ++i) {
p[i] = 0;
}
就相当于:
int* p = (int*) calloc(N*sizeof(int));
2.2.3 free
可以参照下文c++中的delete;
#include<iostream>
#include<iomanip>
using namespace std;
const int R = 4;
const int C = 5;
int main() {
int** p;
int i=0, j = 0;
p = new int* [R];
for(i=0; i<R; ++i) {
p[i] = new int[C];
}
for(i=0; i<R; ++i) {
for(j=0; j<C; ++j) {
p[i][j] = 0;
}
}
for(i=0; i<R; ++i) {
for(j=0; j<C; ++j) {
cout<<setw(5)<<p[i][j];
}
cout<<endl;
}
for(i=0; i<R; ++i)
delete[] p[i];
delete[] p;
}
转自《C++ primer》:动态分配数组时,如果数组元素具有类类型,将使用该类的默认构造函数实现初始化;如果数组元素是内置类型,则无初始化;
一定要delete,而且delete的顺序要和new出来的相反(构造和析构呀~~~)。
Java最简单一步到位!
public class Main {
public static void main(String[] args) {
int[][] a = new int[4][5];
for (int i = 0; i < 4; ++i) {
for (int j = 0; j < 5; ++j) {
System.out.print(a[i][j]);
}
System.out.println();
}
}
}
本文给出了用c/c++,java语言进行程序设计时常用的动态内存申请方法,由本文可见,java在处理这类问题时确实有其简洁性,优越性。
分享到:
相关推荐
在C/C++开发中,动态分配内存(new/malloc)需要我们手动释放资源。这样做的好处是,需要申请多少内存空间可以很好的掌握怎么分配。但是这有个缺点,如果忘记释放内存,则会导致内存泄漏。在很多高级语言中(python/Go/...
在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...
在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...
JAVA吸收C和C++的优点,基础语法与C语言模式完全一样,容易掌握 JAVA健壮性高,它去掉指针、内存申请和释放、无条件转移语句,但有引用的概念,实际传递的是内存地址 (大小为4字节) JAVA提供多线程、提供动态下载...
JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...
要理解java对象的生命周期,我们需要要明白两个问题, ...在C++中,我们可以用new操作符在堆中动态申请内存,编写析构函数调用delete释放申请的内存;那么在java中究竟是内存怎样管理的呢?要弄清这个问题
JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...
JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...
JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...
JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...
JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...
JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...
JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...
JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...
JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...
会遍历该链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删除,并将该结点的空间分配给程序,另外,对于大多数系统,会在这块内存空间中的首地址处记录本次分配的大小,这样,代码中的...
JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...
JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...