国产探花免费观看_亚洲丰满少妇自慰呻吟_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;


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

圖片精選

主站蜘蛛池模板: 淄博市| 洛扎县| 玉环县| 长寿区| 马公市| 潞城市| 平江县| 台北市| 根河市| 南阳市| 科技| 五指山市| 临夏市| 弋阳县| 广元市| 政和县| 长汀县| 肃南| 石棉县| 句容市| 安宁市| 集贤县| 梓潼县| 民勤县| 衡南县| 长兴县| 贡嘎县| 边坝县| 乌拉特后旗| 达州市| 句容市| 漾濞| 墨脱县| 荆门市| 河池市| 襄垣县| 新化县| 新闻| 福海县| 长垣县| 红安县|