动态内存开辟

malloc、calloc、realloc和free

在使用这些函数的时候,需要引头文件 #include< stdlib.h>

malloc

malloc的意思就是动态内存分配,用于申请一块连续的指定大小的内存块区域以void*类型返回分配的内存区域地址,当无法知道内存具体位置的时候,想要绑定真正的内存空间,就需要用到动态的分配内存。

函数原型:void *malloc(unsigned int num_bytes);

eg:分配100个int类型的空间:

int *p = (int*)malloc(100 * sizeof(int));
free(p);
p = NULL;

malloc在使用的时候要和free连用,当开辟了一块动态内存而没有free的时候,就引发了内存泄漏。

calloc

calloc和malloc大致相同,不过calloc对开辟的动态内存会进行初始化,用calloc开辟空间的时候,是用完之后也必须释放开辟的空间。

函数原型:void *calloc(size_t n, size_t size);

eg:

int *p = (int*)calloc(100 , sizeof(int));
free(p);
p = NULL;

realloc

realloc的意思是动态内存调整,也就是所谓扩容的意思。
realloc有两种调整方法:
1.给定一个指针指向一块内存,当这块内存后面有足够内存扩容的时候,会直接在这块内存后面直接开辟内存,然后返回整块内存的首地址。
2.给定一个指针指向一块内存,当这块内存后面没有足够内存扩容的时候,realloc会重新找一块足够大的空间开辟内存,然后将之前内存的数据复制过来,最后返回这块内存的首地址。

realloc的函数原型:
void *realloc(void *mem_address, unsigned int newsize);

eg:

int *p = (int*)realloc(p, 200 * sizeof(int));
free(p);
p = NULL;

猜你喜欢

转载自blog.csdn.net/lly17792230965/article/details/80392398