首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C 語言變長陣列 (VLA) 在標準 C 中不可移植:改用 malloc 動態配置二維陣列

     編輯:程式設計綜合問答

問題代碼


int i, j;
scanf("%d,%d", &i, &j);
char a[i][j]; // C99 VLA,C11 為可選,MSVC 不支援

正確做法:動態配置


char **a = malloc(i * sizeof(char*));
for (int r = 0; r < i; ++r)
    a[r] = malloc(j * sizeof(char));

// 使用 a[r][c] ...

// 釋放
for (int r = 0; r < i; ++r) free(a[r]);
free(a);

替代:連續記憶體


char *flat = malloc(i * j);
#define IDX(r,c) flat[(r)*j + (c)]
// 釋放 free(flat);

注意

  • VLA 分配在堆疊,大小過大易導致堆疊溢位。
  • malloc 分配在堆,需手動釋放,支援任意大小。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved