linux C錯誤匯集

2021-09-06 17:08:14 字數 840 閱讀 2855

問題一:

22.c: in function 『main』:

22.c:8:9: error: empty character constant

解決方法:少了空格

問題2.  沒有連線到math函式庫

gcc 12.c -o 12 -lm

問題3.segment fault

1.記憶體訪問越界

a) 由於使用錯誤的下標,導致陣列訪問越界

b) 搜尋字串時,依靠字串結束符來判斷字串是否結束,但是字串沒有正常的使用結束符

c) 使用strcpy, strcat, sprintf, strcmp, strcasecmp等字串操作函式,將目標字串讀/寫爆。應該使用strncpy, strlcpy, strncat, strlcat, snprintf, strncmp, strncasecmp等函式防止讀寫越界。

2 多執行緒程式使用了執行緒不安全的函式。

3 多執行緒讀寫的資料未加鎖保護。對於會被多個執行緒同時訪問的全域性資料,應該注意加鎖保護,否則很容易造成core dump

4 非法指標

a) 使用空指標

b) 隨意使用指標轉換。乙個指向一段記憶體的指標,除非確定這段記憶體原先就分配為某種結構或型別,或者這種結構或型別的陣列,否則不要將它轉換為這種結構或型別 的指標,而應該將這段記憶體拷貝到乙個這種結構或型別中,再訪問這個結構或型別。這是因為如果這段記憶體的開始位址不是按照這種結構或型別對齊的,那麼訪問它 時就很容易因為bus error而core dump.

5 堆疊溢位.不要使用大的區域性變數(因為區域性變數都分配在棧上),這樣容易造成堆疊溢位,破壞系統的棧和堆結構,導致出現莫名其妙的錯誤。

linux C錯誤匯集

問題一 問題2.沒有連線到math函式庫 gcc 12.c o 12 lm 問題3.segment fault 1.記憶體訪問越界 a 由於使用錯誤的下標,導致陣列訪問越界 b 搜尋字串時,依靠字串結束符來判斷字串是否結束,但是字串沒有正常的使用結束符 c 使用strcpy,strcat,sprin...

程式設計錯誤匯集

1.請看下面兩行 vs2010 c unsigned int def buffer size 1024 char buffer def buffer size 編譯,報錯,錯誤在第二行,錯誤是error c2057 expected constant expression。看來vc裡定義乙個字串的時...

Linux C語言錯誤處理

中定義了perror perror是在標準輸出上輸出msg字串,然後再後面加上 錯誤語段 這個錯誤語段對應這時的errno 中定義了strerror strerror是把乙個錯誤numb作為引數,然後返回錯誤numb所對應的錯誤語段,一般用errno。include include include ...