在C語言中,若陣列大小需由使用者執行時輸入決定,靜態陣列(如 int arr[n])在C89標準下不合法。解決方案是使用動態記憶體分配函數 malloc()、calloc()、realloc() 及釋放函數 free()。
#include <stdio.h>
#include <stdlib.h>
int main() {
int n, *arr, i;
printf("請輸入陣列大小: ");
scanf("%d", &n);
// 分配記憶體
arr = (int*)malloc(n * sizeof(int));
if(arr == NULL) {
printf("記憶體分配失敗\n");
return 1;
}
// 使用陣列
for(i = 0; i < n; i++) arr[i] = i * 2;
for(i = 0; i < n; i++) printf("%d ", arr[i]);
// 釋放記憶體
free(arr);
return 0;
}
int **matrix;
int rows = 3, cols = 4, i, j;
// 分配行指標陣列
matrix = (int**)malloc(rows * sizeof(int*));
for(i = 0; i < rows; i++) {
// 為每行分配列空間
matrix[i] = (int*)malloc(cols * sizeof(int));
}
// 初始化與使用
for(i = 0; i < rows; i++)
for(j = 0; j < cols; j++)
matrix[i][j] = i + j;
// 釋放:先釋放每行,再釋放行指標陣列
for(i = 0; i < rows; i++) free(matrix[i]);
free(matrix);
<stdlib.h> 標頭檔NULL 防止記憶體不足free() 釋放,避免記憶體洩漏為提升緩存命中率,可一次性分配連續空間:
int *matrix = (int*)malloc(rows * cols * sizeof(int));
// 訪問:matrix[i * cols + j]
此法分配/釋放僅需一次呼叫,適合高效能計算場景。