亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Linux中bug的解決方法

發布時間:2021-10-22 11:08:55 來源:億速云 閱讀:382 作者:柒染 欄目:互聯網科技

Linux中bug的解決方法,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

最近調試過程中遇到了一個問題,現象是在沒有GPS信號的情況下,程序每次跑幾分鐘后就會出現以下錯誤提示信息,導致程序中斷退出:

double free or corruption (out)

Aborted (core dumped)
此問題折騰了我大概兩小時,在此做個總結。
剛開始我檢查代碼,是否有double free 的地方,發現并沒有。后來,我在代碼里加了malloc是否成功的判斷以及free后指針賦NULL的語句,依然是同樣的問題。
再后來我把log打開看,看的過程中突然發現一個現象,就是每次程序掛掉時,串口讀到的數據長度都是450字節,再仔細看,其實是讀了兩串數據,即兩條GNRMC及其他語句。
buff len:450;$GNRMC,,V,,,,,,,,,,N*4D
$GNVTG,,,,,,,,,N*2E
$GNGGA,,,,,,0,00,99.99,,,,,,*56
$GNGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*2E
$GNGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*2E
$GPGSV,1,1,00*79
$GLGSV,1,1,00*65
$GNGLL,,,,,,V,N*7A
$GNRMC,,V,,,,,,,,,,N*4D
$GNVTG,,,,,,,,,N*2E
$GNGGA,,,,,,0,00,99.99,,,,,,*56
$GNGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*2E
$GNGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*2E
$GPGSV,1,1,00*79
$GLGSV,1,1,00*65
$GNGLL,,,,,,V,N*7A
double free or corruption (out)

Aborted (core dumped)

正常情況下,讀到都是如下信息,即只有一條GNRMC語句。

buff len:225;$GNRMC,,V,,,,,,,,,,N*4D
$GNVTG,,,,,,,,,N*2E
$GNGGA,,,,,,0,00,99.99,,,,,,*56
$GNGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*2E
$GNGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*2E
$GPGSV,1,1,00*79
$GLGSV,1,1,00*65

$GNGLL,,,,,,V,N*7A

有了這個線索就好找問題了,  問題出在下面這個函數malloc分配空間時那個多加的數字100上,

int gps_analyse(char *buff,int buff_len,GNSS *gps_data)

{

    ……

    char *tmpbuf;

    tmpbuf = (char *)malloc(strlen(ptr)+100);

    memset(tmpbuf, 0, strlen(ptr)+100);

    memcpy(tmpbuf, ptr, strlen(ptr));

    while (strstr(tmpbuf, ",,"))

        strrpl(tmpbuf, ",,", ",@,");

   ……

這個100本意是用來將,,替換成,@,時用的,對于上面那種特殊狀態,總共有114個連續,,,所以空間分配不足,導致出現問題。
解決方法也很簡單,只要把100加大些就可以。  這個問題,帶給我以下幾點啟發:
1)malloc分配空間時大小一定要注意
2)測試時要覆蓋各種可能的情況,不能只考慮正常狀態,之前我就只測了有GPS信號時的狀態;

3)測試時時間要足夠長。

關于Linux中bug的解決方法問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

禄丰县| 宁德市| 沙坪坝区| 锦屏县| 荣成市| 安平县| 乡城县| 西乌珠穆沁旗| 陇西县| 花垣县| 格尔木市| 宁城县| 寿光市| 若羌县| 凌源市| 诏安县| 罗定市| 合江县| 眉山市| 高州市| 新津县| 南宁市| 怀化市| 蒙城县| 定州市| 通州区| 广南县| 大冶市| 阳曲县| 玉溪市| 永新县| 布尔津县| 阳朔县| 卓资县| 梁河县| 宁德市| 子洲县| 金门县| 沙洋县| 阜康市| 通河县|