malloc、calloc和realloc

(1)、malloc在分配内存之后不会对分配的内存进行初始化

(2)、calloc在分配内存之后,在返回指向已分配的内存的指针之前会对内存进行初始化

(3)、realloc用于修改一个原先已分配的内存块大小,如果原先的内存块大小无法改变,该函数将分配一块正确大小的内存,并把原先那块内存的内容复制到新分配的内存块上。所以在使用该函数后,就不能再使用指向旧内存块的指针。该函数不对新内存初始化。

(4)、在一块内存不使用时使用free函数将内存释放。

 

下面的程序是动态分配内存:

  1. /** 
  2.  * 将字符串复制到动态分配的内存中,不限值字符串的长度 
  3.  * @file string_alloc.c 
  4.  * @brief    
  5.  * @author struggleLinux@gmail.com 
  6.  * @version 1.0 
  7.  * @date 2011-05-19 
  8.  */ 
  9.  
  10. #include <stdio.h> 
  11. #include <stdlib.h> 
  12. #include <string.h> 
  13. #define False 0 
  14.  
  15. /** 
  16.  * 获取字符并动态分配内存空间 
  17.  * @brief   alloc_string  
  18.  * 
  19.  * @return   
  20.  */ 
  21. char * alloc_string(  ) 
  22.     char *string; 
  23.     int i , flag; 
  24.      
  25.     string = (char *)malloc(1);  //为分配一个字符长度 
  26.     if( string == NULL ) 
  27.         return NULL; 
  28.  
  29.     for( i = 0 ; (*(string+i) = getchar()) != EOF ;i++ ){ 
  30.         if(*(string+i) == 'Q' ){ //Q退出循环 
  31.             *(string+i) = '\0'
  32.             break
  33.         } 
  34.         string = (char * )realloc( string,strlen(string)+1); //为string重新分配长度 
  35.         if( string == NULL ){ 
  36.             break
  37.         } 
  38.     } 
  39.     return string; 
  40.  
  41. int main() 
  42.     char *str; 
  43.      
  44.     str = alloc_string(); 
  45.      
  46.     if( str == NULL ) 
  47.         printf("ERRORS:动态分配错误"); 
  48.     else 
  49.         printf("字符串为:\n%s\n",str); 
  50.  
  51.     return 0;