1. 程式人生 > >gcc編譯出現segmentation fault的錯誤

gcc編譯出現segmentation fault的錯誤

segmentation fault 即段錯誤,一般都是出現了非法的地址寫操作導致的。

常見的有如下幾種情況:

1、空指標訪問。

如果指標為空(NULL), 那麼對空指標的讀寫操作都會導致segmentation fault。

1 2 3 char *p = NULL; printf("%c",*p);//讀操作 *p='A';//寫操作。

兩種操作任意一種都會導致segmentation fault。

2、指標指向非法區域後的寫操作。

C語言的指標指向了非法區域,然後對其寫入,會帶來不可預知後果,最嚴重的就是程式崩潰,此時也是segmentation fault。

比如

1 2 3 char *p = malloc(100);//申請100位元組空間 p+=1000;//超出申請範圍。 *p='a';//此時就有可能出現segmentation fault

或者

1 2 3 char *p = malloc(100);//申請記憶體 free(p);//釋放 *p = 'a';//此時p指向空間已經釋放,有可能被系統用作其它功能,對其賦值就可能出現segmentation fault。

3、常量空間破壞。

比如常量字串,如果修改其內容,則會出現segmentation fault。

1 2 char *p = "abcdef"
;//p指向常量字串。 p[1] = 'M';//修改常量空間,導致segmentation fault

4、在一些比較老的作業系統上,非對齊訪問也可能導致segmentation fault。

比如

1 2 3 4 int a[2]; char *p1 = (char *)a;//指向陣列首地址。 int *p2 = (int *)(p1+1);//實際上將a[0]和a[1]的各一部分,組成了一個新的int。 這時對p2的訪問,包括讀寫,都屬於非對齊訪問。 *p2=3;//此時有可能出現segmentation fault

相關推薦

gcc編譯出現segmentation fault錯誤

segmentation fault 即段錯誤,一般都是出現了非法的地址寫操作導致的。 常見的有如下幾種情況: 1、空指標訪問。 如果指標為空(NULL), 那麼對空指標的讀寫操作都會導致segmentation fault。 如 1 2 3 ch

[轉]【已解決】Linux下出現Segmentation Fault(core dump)錯誤

最近在Linux環境下做C語言專案,由於是在一個原有專案基礎之上進行二次開發,而且專案工程龐大複雜,出現了不少問題,其中遇到最多、花費時間最長的問題就是著名的“段錯誤”(Segmentation Fault)。藉此機會系統學習了一下,這裡對Linux環境下的

【已解決】Linux下出現Segmentation Fault(core dump)錯誤

今天被這個問題搞了半個小時,後來通過新增printf(...)語句的方法找到了錯誤原因,是因為在程式中錯誤的輸出一個為空的字串導致。。。 1. 段錯誤是什麼 一句話來說,段錯誤是指訪問的記憶體超出了系統給這個程式所設定的記憶體空間,例如訪問了不存在的記憶體地址、訪

使用strace排查Segmentation fault錯誤

51cto 這也 文件內容 com 說明 middle col prim vpd 今天,DBA突然跟我說,有一臺測試機的sqlplus用不了,讓我幫忙看看什麽問題。 問題現象就是,執行sqlplus命令後直接報錯,登錄不了ORACLE數據庫: [oracle@epay-te

gcc編譯出現dlopen、dlerror、dlsym、dlcolse的解決方法

  ➜  test_sqlite3 gcc *.c -I . -o xixi -pthread      /tmp/cckGKTrr.o: In function `unixDlOpen':

當import matplotlib.pyplot as ply 出現Segmentation fault (core dumped)

當我在py檔案中匯入matplotlib.pyplot後,在linux shell 執行py檔案時,出現Segmentation fault (core dumped)錯誤提示,谷歌之後,找到了解決的方法: import matplotlib as mpl mpl.use(

caffe編譯出現的一些錯誤及解決方法(僅供參考)

1、make pytest時,出現layer_factory.hpp:77 ] Check failed: registry..... 解決方法:開啟caffe目錄下的Makefile.config檔案,找到WITH_PYTHON_LAYER  := 1這一行,將前面的‘#

Linux環境中MangoDB第一次啟動出現Segmentation fault異常

背景: 原本有一臺Linux機器A已經運行了某版本的MongoDB資料庫,為了保證版本一致,將該安裝包拉到新的Linux機器B上面部署。 情況: 執行./mongo命令時,出現這個異常: Segmentation fault 解決: 查詢網上資料,說的大多都是“

gcc編譯出現“warning: implicit declaration of function ‘inet_aton’”

在linux下寫了一個簡單的網路程式,用到函式inet_aton。使用gcc編譯,編譯的時候加上了-std=c99,編譯可以通過,但是報錯“warning: implicit declaration of function ‘inet_aton’”。去掉-std=c99,編譯

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

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

Xcode編譯出現的二進位制錯誤(xxname.o)

原因 在生成彙編的過程中依賴的檔案或者庫沒有匯入,導致在動態編譯的時候二進位制檔案引用錯誤 常出現的場景 檔案的name.m檔案沒有匯入Compiles Sources,一般顯示是objc_Class_$_Name,referencer from

yum Segmentation fault 錯誤解決

[email protected]:/var/run>yum install gcc*Configuration file /etc/yum/pluginconf.d/security.conf not foundUnable to find configur

Spyder (Ubuntu 18.04) Segmentation Fault錯誤解決方案

1、Ubuntu環境下,安裝了tensorflow,執行Spyder,出現Segmentation Fault錯誤2、原因查詢:    1)pyqt、qt都已經安裝;    2)pip install - U spyder,重新安裝,仍然報錯;3、環境描述    [email

mysql報Segmentation fault錯誤

問題現象如下 [[email protected] bin]# ./mysql -uroot -p Enter password: Welcome to the MySQL monitor

mini2440開發板執行Qt程式出現Segmentation fault的另一種奇葩原因:Ubuntu下使用FileZilla通過FTP方式傳輸程式

使用QWT-6.1.2寫了一個名為dataplot的小程式,Ubuntu下執行正常,遂交叉編譯後傳到開發板上,執行,報錯:Segmentation fault。 主機環境:Ubuntu 12.04 + gcc 4.6.3 + Qt 4.8.1 開發環境:arm-linux-

Linux下使用-static -lpthread靜態編譯出現錯誤Segmentation fault

最近在看golang,感覺go的靜態編譯思想很不錯。於是準備把手頭的幾個專案靜態編譯一下,結果編譯的時候沒報任何警告及錯誤,一執行就報段錯誤(Segmentation fault)。gdb逐步除錯,發現問題出在std::thread那裡。仔細檢查了下所有語法,沒

關於Ubuntu下gcc編譯帶-lsqlite3出現錯誤的解決方法

如下錯誤: /usr/bin/ld: 找不到 -lsqlite3 collect2: error: ld returned 1 exit status Makefile:16: recipe for target 'FrontServer' failed make: ***

gcc出現錯誤的時候停止編譯 -Wfatal-errors

有時候我們編譯一個大的專案的時候,會出現很多錯誤使得螢幕堆滿了很多無用的資訊。一般情況下我們需要找到首次出現錯誤的地方,在gcc中新增編譯選項可以使編譯停止在第一次出現錯誤的地方: $ gcc -

GCC編譯uboot出現(.ARM.exidx+0x0): undefined reference to `__aeabi_unwind_cpp_pr0'錯誤的解決辦法

/opt/arm-2010.09/bin/../lib/gcc/arm-none-linux-gnueabi/4.5.1/armv4t/libgcc.a(_bswapsi2.o):(.ARM.exid

Dev 日誌 | 一次 Segmentation FaultGCC Illegal Instruction 編譯問題排查

摘要 筆者最近在重新整理和編譯 Nebula Graph 的第三方依賴,選出兩個比較有意思的問題給大家分享一下。 Flex Segmentation Fault——Segmentation fault (core dumped) 在編譯 Flex 過程中,遇到了 Segmentation fault: m