malloc有什么用

来源:百度知道 编辑:UC知道 时间:2024/06/04 03:39:31
我知道它是申请一个内存空间
可是为什么要申请内存空间呢?
如果不申请会有什么问题吗?

malloc申请的空间是在"堆"上的

平时我们都是用声明变量来申请空间的,此时申请到的空间是"栈"上的

栈上的空间, 不需要程序员负责释放.
例如,在以下函数中
int go() {
int a;
int b[50];
}
在运行到go里面时, 申请了4个字节(int类型是4个字节)的空间来放变量a, 4*50=200个字节的空间来放变量数组b

在调用go时
// ...
go();
// ...

在运行到go()函数的里部,会申请相应的空间,但在退出go()以后,这些空间就会被废弃.

这在有些时候不能够满足我们的需求,因而就要用到malloc和free
malloc申请的空间,要由我们程序员来负责释放

int go() {
int* a;
a = malloc(sizeof(int));
}
这样就在堆上申请到了4个字节的空间了(sizeof(int)能够得到int的大小, 返回4).

我们还可以
int* a;
a = malloc(100 * sizeof(int))
来申请到100个int的空间.

退出go以后,空间不会释放.所以要用free来释放.

:)

有时候你写程序不知道要用多大的空间,
如果开的小了,程序过不了,
如果开的大了,有浪费内存,
所以就有了动态的内存申请机制,申请的是堆空间,
但是申请了之后一定要释放哦

malloc严格的说是C语言中的规范,C++一般使用new来分配内存,而且,不管是malloc还是new,都是在内存的堆区分配,用户使用完后还得自己清理,不然就会产生内存垃圾,如果这种内存垃圾积累到一定程度就会引起内存崩溃.
给你写个例子.........

#include <stdio.h>
#