malloc、calloc和realloc
(1)、malloc在分配内存之后不会对分配的内存进行初始化
(2)、calloc在分配内存之后,在返回指向已分配的内存的指针之前会对内存进行初始化
(3)、realloc用于修改一个原先已分配的内存块大小,如果原先的内存块大小无法改变,该函数将分配一块正确大小的内存,并把原先那块内存的内容复制到新分配的内存块上。所以在使用该函数后,就不能再使用指向旧内存块的指针。该函数不对新内存初始化。
(4)、在一块内存不使用时使用free函数将内存释放。
下面的程序是动态分配内存:
- /**
- * 将字符串复制到动态分配的内存中,不限值字符串的长度
- * @file string_alloc.c
- * @brief
- * @author struggleLinux@gmail.com
- * @version 1.0
- * @date 2011-05-19
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define False 0
- /**
- * 获取字符并动态分配内存空间
- * @brief alloc_string
- *
- * @return
- */
- char * alloc_string( )
- {
- char *string;
- int i , flag;
- string = (char *)malloc(1); //为分配一个字符长度
- if( string == NULL )
- return NULL;
- for( i = 0 ; (*(string+i) = getchar()) != EOF ;i++ ){
- if(*(string+i) == 'Q' ){ //Q退出循环
- *(string+i) = '\0';
- break;
- }
- string = (char * )realloc( string,strlen(string)+1); //为string重新分配长度
- if( string == NULL ){
- break;
- }
- }
- return string;
- }
- int main()
- {
- char *str;
- str = alloc_string();
- if( str == NULL )
- printf("ERRORS:动态分配错误");
- else
- printf("字符串为:\n%s\n",str);
- return 0;
- }