必须要引入头文件 <stdlib.h> 三种开辟方式 ### 1. malloc 先来看看函数原型:void* malloc (size_t size);
可以从文档里看出,该函数参数是一个要开辟的字节数。
具体怎么操作呢:
//因为返回的是一个指向块开头的指针,因此我们需要强转成指针类型
int* p1 = (int*) malloc(sizeof(int));
free (p1); //malloc开辟的空间需要 free 来释放空间,否则会造成内存泄漏
### 2. realloc: void* realloc ( void * ptr, size_t size );
它说的是什么意思呢? 简单地说就是,该函数可以将内存块移动到新的位置,在这种情况下,将返回新的位置。即使块被移动,内存块的内容也会保留到新旧大小中较小的大小。如果新大小较大,则新分配的部分的值不确定。在ptr为空的情况下,该函数的行为与malloc完全相同,它分配一个新的大小字节块,并返回一个NULL。
ptr:指向先前用malloc、calloc或realloc分配的内存块的指针,以便重新分配。 size: 指内存块的新大小(以字节为单位)。如果它是0, ptr指向一个现有的内存块,那么ptr指向的内存块将被回收,并返回一个空指针。
### 3. calloc:void* calloc ( size_t num, size_t size );
该函数的功能是: 为num元素数组分配一个内存块,每个元素的大小都是字节长,并将其所有的 位 初始化为0。
三种内存开辟具体实例
void Test()
{
int* p1 = (int*)malloc(sizeof(int));
free(p1);
int* p2 = (int*)calloc(4, sizeof(int));
int* p3 = (int*)realloc(p2, sizeof(int) * 10);
// 这里需要free(p2)吗?
free(p3); //答案当然是不需要的啊,原因我已经在上面说过,还不理解的在翻到上面去看看
}
当动态分配的内存不再需要使用时,这块内存就应该被释放,这样可以被重新分配使用。分配但不在使用完成之后释放内存会造成内存泄漏。 内存泄漏最终将会一点一点的榨干内存,最后只能重启。万一实在一个大型的服务器,那后果难以想象,对于一个程序猿来说大概就差不多可以收拾东西滚蛋了,啊哈哈哈哈。