next up previous contents
Next: 型態轉變 Up: 其他 Previous: 其他   Contents

記憶體管理

  1. 記憶體管理函式
    函式 描述
    void *calloc(int num, int size); 配置一個 num 個元素的陣列,每個元素 size bytes。
    void free(void *address); 將位址 address 的記憶體區塊釋出。
    void *malloc(int num); 配置一個 num 個元素的陣列,保留讓使用者初始化每個元素的 size。
    void *realloc(void *address, int newsize); _ 重新配置記憶體至新的大小 newsize。
  2. 動態配置記憶體 malloc():例如某一函式中有一陣列,陣列元素個數隨傳入的參數而動。
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main()
    {
       char name[100];
       char *description;
    
       strcpy(name, "Zara Ali");
    
       /* allocate memory dynamically */
       description = malloc( 200 * sizeof(char) );
       if( description == NULL )
       {
          fprintf(stderr, "Error - unable to allocate required memory\n");
       }
       else
       {
          strcpy( description, "Zara ali a DPS student in class 10th");
       }
       printf("Name = %s\n", name );
       printf("Description: %s\n", description );
    }
    
  3. esizing realloc() 及 Releasing free() 記憶體。
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main()
    {
       char name[100];
       char *description;
    
       strcpy(name, "Zara Ali");
    
       /* allocate memory dynamically */
       description = malloc( 30 * sizeof(char) );
       if( description == NULL )
       {
          fprintf(stderr, "Error - unable to allocate required memory\n");
       }
       else
       {
          strcpy( description, "Zara ali a DPS student.");
       }
       /* suppose you want to store bigger description */
       description = realloc( description, 100 * sizeof(char) );
       if( description == NULL )
       {
          fprintf(stderr, "Error - unable to allocate required memory\n");
       }
       else
       {
          strcat( description, "She is in class 10th");
       }
       
       printf("Name = %s\n", name );
       printf("Description: %s\n", description );
    
       /* release memory using free() function */
       free(description);
    }
    



2015-01-16