strcat 小bug引起的大問題

2021-06-27 20:38:22 字數 473 閱讀 5495

在除錯stm32時,單步打斷點執行時,沒有問題,但是全速執行時,偶爾會跳過錯誤,偶爾也會跳轉hardfault;

問題實在難找。。。

最後定位在傳送資料的快取上, 發現傳送快取部分除了應該有的資料之外, 還有好多不 為0的值;

也就是說,在棧上申請的記憶體,沒有經過初始化,就使用strcat來追加字串了;

詳細查了一下strcat的用法,發現strcat需要先找到dest的結尾,才能夠繼續追加;

如果申請的記憶體沒有初始化, 可能就會導致追加的字串的位置不正確;從而可能導致了記憶體溢位(覆蓋);

所以 程式就崩了。。。

貼上glibc的strcat的原始碼

char *

strcat (dest, src)

char *dest;

const char *src;

while (c != '\0');

return dest;

}

虛擬路徑引起的bug

之前,遇到乙個問題,就是,專案訪問不了最新產生的pdf檔案。百思不得其解,為什麼,返回 idea 頁面就可以訪問了 真的只是返回 idea 頁面,不進行其他什麼的操作 一直以為是熱部署的問題 後來,在跟技術總管的交流下發現,其實是路徑的問題,pdf 確實生成了,但是它只是儲存在工程目錄中,沒有進入專...

typedef struct引起的結構體問題

原來一直認為結構體定義只有struct開頭的方法。今天看一本書突然看到typedef struct開頭的結構體定義方式吧自己搞的一臉懵逼。既然如此那就看看吧!1 先定義結構體型別,再定義變數 注 注意在c語言中定義結構體變數的時候是struct student打頭的。struct student s...

memcpy引起的乙個bug

void memcpy void dest,const void src,size t n 由src指向位址為起始位址的連續n個位元組的資料複製到以dest指向位址為起始位址的空間內。memcpy dest,0,5 真正應該使用的是 memset dest,0,5 關於memset memset 函...