Linux 相关文章嵌入式 Linux C ARM Linux

动态分配那些事儿

2019-02-09  本文已影响2人  Leon_Geo

当编写程序时,偶尔会不确定数组的大小(包括存储字符串的数组)。较为方便的做法是等到程序运行时再来确定数组的实际大小。
在标准C中,提供了3个库函数:malloc(),calloc()和realloc()。那么他们有什么区别,分别用在什么场合呢?

malloc()函数

函数原型:
void * malloc(size_t num_byte)
参数介绍:

int *p;
p = (int *)malloc( n * sizeof(int) );
if ( NULL = p ){
    printf("malloc failed!");
    exit(EXIT_FAILURE);
}
...

-需要注意的是,它从内存的堆(heap)资源中分配空间,且不会对分配的内存资源进行初始化。

calloc()函数

函数原型:
void *calloc(size_t n_memb,size_t size)
参数介绍:
-同malloc()函数,如果申请成功会它返回一个无类型(通用)指针,使用者需要通过强制类型转换将其转换为你需要的类型。如果申请失败,函数返回空指针。

int *a;
a = (int *)calloc( n*sizeof(int) );
if(NULL=a){
printf("mallocfailed!");
exit(EXIT_FAILURE);
}

realloc()函数

一旦分配完了空间,稍后可能会发现空间过小或者过大。此时该函数可以调整原来空间的大小以适应新的要求。
函数原型:
void *realloc(void *ptr, size_t size)
参数介绍:

使用原则:

free()函数

在讲解了空间分配函数后,不得不提的就是要及时!及时!及时!释放之前申请的空间。否则随着程序的运行,会产生大量内存垃圾(内存泄露),最后系统会因资源耗尽而嗝屁。
函数原型:
void free(void *ptr)
参数介绍:

p = malloc(...);
...
free(p);
上一篇 下一篇

猜你喜欢

热点阅读