萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> Linux 教學

Linux 程式設計遇到 Segmentation fault(段錯誤)怎麼辦?未分配記憶體指標直接操作是主因,malloc 分配空間即可解決

Linux C/C++ 開發中,Segmentation fault(段錯誤) 多因指標指向非法記憶體位址。典型錯誤為宣告 char *ptr; 未分配記憶體即直接寫入,導致覆寫關鍵區域觸發保護機制終止程式。

🐛 錯誤程式碼範例

char *c1;
for (i = 0; i < n; i++) {
    *c1 = getchar();  // c1 未指向有效記憶體!
    c1++;
}

✅ 正確做法:malloc 分配記憶體

char *c1 = malloc(n * sizeof(char));  // 分配 n 個位元組
if (c1 == NULL) { /* 處理分配失敗 */ }

for (i = 0; i < n; i++) {
    c1[i] = getchar();  // 安全存取已分配區域
}
free(c1);  // 用畢釋放

🔍 核心觀念

  • 指標宣告後必須指向有效記憶體(malloc/new/陣列)才能解參考。
  • 未初始化指標(野指標)指向隨機位址,寫入時極易觸發 Segfault。
  • 釋放記憶體後指標未歸零,後續使用形成「懸空指標」同樣危險。

遇到 Segfault 先檢查所有指標是否經過合法記憶體分配,善用 GDB bt 回溯堆疊定位崩潰行號,配合 Valgrind 偵測記憶體錯誤。

copyright © 萬盛學電腦網 all rights reserved