国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

c/c++ g++默認編譯調用成功,O2優化卻發生Segmentation fault

2019-11-06 06:56:18
字體:
來源:轉載
供稿:網友

一、背景:

正常默認編譯下,調用成功,沒有發生任何錯誤,調用成功。

但O2優化條件下,卻發生了Segmentation fault錯誤。

這一般表明代碼存在內存錯誤訪問的情況。

二、檢測代碼發生Segmentation fault的位置:

兩種方式

第一種

1.編譯代碼添加-g參數

2.ulimit -c unlimited,使代碼發生Segmentation fault的時候會在當前位置生成core文件

3.gdb a.out core

4.bt 打印方法棧

第二種

1.編譯代碼添加-g參數

2.gdb a.out

3.bt打印segment fault時的方法棧

三、定位可能發生的變量

從第一行函數調用的位置開始查看,

如果該位置并不是自己所編寫的代碼,或者是以前已經經過測試的代碼,那一般可以跳過,不過需要注意這些函數的參數是否是自己傳遞過來的

對于是自己所編寫的代碼,那就應該進行到該代碼位置,然后查看調用該函數的時候,自己所初始化的變量是否正確(一般錯誤就是自己所初始化的這些變量出現了問題,可能是由于自己編寫代碼的時候沒注意,實際可能是簡單的筆誤而已)

四、本人的情況

char *header[2];header[1] = "Content-type:application/json";header[2] = NULL;相信看到這段代碼,已經知道這代碼初始化時錯誤的,header下標是0,1。2已經是越界了。但就是這么低級的錯誤,可能在編寫的過程中,也會被忽略。

但是這樣的代碼卻在完整代碼編譯的情況,只在O2優化的時候才會出錯,因此一旦發生錯誤,自己也可能毫無頭緒。所以更應該注意代碼越界問題,和如果一步步定位代碼問題。

正確代碼如下:

char *header[2];header[0] = "Content-type:application/json";header[1] = NULL;


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 广宗县| 嘉荫县| 宁远县| 台前县| 新巴尔虎右旗| 福安市| 肇州县| 水富县| 清丰县| 进贤县| 洛隆县| 普兰店市| 南昌县| 灵川县| 红安县| 万宁市| 湘潭县| 峨山| 固始县| 涟水县| 武山县| 天祝| 洮南市| 彰化县| 广州市| 江安县| 鄂温| 鄂托克前旗| 丰原市| 石嘴山市| 陈巴尔虎旗| 寻乌县| 横峰县| 丰城市| 新绛县| 乌鲁木齐县| 方城县| 砚山县| 濮阳县| 高安市| 霍城县|