1. 程式人生 > >linux程式設計中遇到的Segmentation fault錯誤

linux程式設計中遇到的Segmentation fault錯誤

昨天程式設計的時候,遇到了Segmentation fault錯誤。使用GDB除錯時才發現的,順便說下。習慣了圖形介面式的除錯工具,用命令列確實還是不習慣。關於此錯誤問了下谷歌,一搜一大篇,看來是一個很常見的問題。

簡單來講,這個錯誤就是因為非法訪問了系統中的記憶體而導致的錯誤,比如一些系統中關鍵記憶體區域。那我的錯誤是怎麼導致的呢?原來我在定義一個char型別的指標,然後就直接對這個指標進行字串的相關操作。比如:

char *c1;

for(i=0; i<n;i++)
{
   *c1 = getchar();
    c1++;
}

程式碼意思大概是這樣,後來想想才發現又煩了老毛病。這個指標危險啊,要謹慎對待,就拿這裡來說,你這樣給指標賦值,誰知道這指標指向的是哪裡呢,萬一寫的資料覆蓋了關鍵區域資料那可能會有災難性的後果,這就是訪問了不該訪問的地方。解決的辦法是什麼呢,告訴這個指標到該到的地方,我用malloc為該指標將要指向的字串申請一段空間,這樣就會指明系統分配一段安全的空間,不會在把記憶體關鍵區域分給你了。這樣你就可以安全操作了。

對於指標,不能掉以輕心了。