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

C 語言 malloc 分配結構體指標未初始化導致崩潰

     編輯:程式設計疑難解答

錯誤代碼片段

SqStack *S;          // 僅聲明指標,未分配記憶體
S->base = (SElemType*)malloc(...); // 解引用野指標 → 未定義行為(通常崩潰)

正確做法:先為指標本身分配記憶體

SqStack *S = (SqStack*)malloc(sizeof(SqStack));
if (!S) return 0; // 配置失敗檢查

S->base = (SElemType*)malloc(10 * sizeof(SElemType));
if (!S->base) { free(S); return 0; }

S->top = S->base;
S->stacksize = 10;

// 後續為元素分配字串空間
S->top->str = (char*)malloc(10 * sizeof(char));
strcpy(S->top->str, "Hello");

記憶體釋放順序(逆序)

free(S->top->str);
free(S->base);
free(S);

關鍵原則

  • 每個 malloc 對應一個 free。
  • 指標變數本身若是動態分配,必須先分配結構體記憶體,再分配其成員指向的記憶體。
  • 使用 Valgrind / AddressSanitizer 檢測記憶體錯誤:gcc -fsanitize=address -g test.c。

养成「先分配容器,再分配內容」的習慣,杜絕野指標崩潰。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved