WeHelp
C 語言是一種通用的、程序式的程式語言,可直接對記憶體與硬體進行操作,效率極高。
  1. C 特色用途、相關職務
  2. Windows 環境建置、測試
  3. Mac 環境建置、測試
  4. Linux 環境建置、測試
  5. C 標準輸出、輸入
  6. C 資料型態
  7. C 變數使用
  8. C 運算符號
  9. IF 條件判斷
  10. Switch 條件判斷
  11. While 迴圈
  12. For 迴圈
  13. Array 陣列
  14. String 字串
  15. Function 函式
  16. 標準函式庫
  17. Struct 結構
  18. Pointer 指標
  19. 指標與函式參數
  20. 指標與陣列
  21. 指標與結構
  22. 動態配置記憶體
動態配置記憶體
## C 語言的動態記憶體配置 動態記憶體配置是指程式在**執行期間**,根據實際需求從堆積區(heap)取得記憶體,而不是在編譯時就決定大小。 ### 要解決的問題 靜態陣列的大小通常必須事先指定,例如: ```c int numbers[100]; ``` 但實際上可能只需要 10 個元素,也可能需要 1000 個元素。動態配置可以: - 在執行時才決定資料大小 - 避免預留過多記憶體 - 建立大小可變的陣列或資料結構 - 支援鏈結串列、樹、動態字串等結構 ### 常用函式 這些函式位於 `<stdlib.h>`: | 函式 | 功能 | |---|---| | `malloc(size)` | 配置指定大小的記憶體,內容未初始化 | | `calloc(count, size)` | 配置多個元素,內容初始化為 0 | | `realloc(ptr, size)` | 調整原本配置的記憶體大小 | | `free(ptr)` | 釋放已配置的記憶體 | ## 簡單範例 以下程式讓使用者輸入陣列大小,動態配置整數陣列,計算總和後釋放記憶體: ```c #include <stdio.h> #include <stdlib.h> int main(void) { int n; int sum = 0; printf("請輸入元素數量:"); scanf("%d", &n); if (n <= 0) { printf("數量必須大於 0。\n"); return 1; } int *numbers = malloc(n * sizeof(int)); if (numbers == NULL) { printf("記憶體配置失敗。\n"); return 1; } for (int i = 0; i < n; i++) { numbers[i] = i + 1; sum += numbers[i]; } printf("總和 = %d\n", sum); free(numbers); numbers = NULL; return 0; } ``` ### 注意事項 1. 配置記憶體後要檢查是否為 `NULL`。 2. 使用完畢後一定要呼叫 `free()`,避免記憶體洩漏。 3. 不可使用已經 `free()` 的指標,否則可能造成錯誤。 4. `malloc(n * sizeof(int))` 中的大小應根據資料型別計算,避免寫死位元組數。
相關學習地圖、教學課程
C 語言,系統程式
掌握基礎的 C 語法,以及進階的系統程式開發能力。