c語言 常見BUG

2021-07-27 08:56:51 字數 2429 閱讀 1206

這裡的這些小問題就是我們平時容易犯到,如果以前沒有犯過嚴加防範,反正一定要注意,這幾類很經典的.(入門級)

1. 

void test()

這段**首先要知道,strncpy的用法,以及它的引數,char *strncpy(char *dest, const char *src, int n)

,把src所指向的字

符串中以src位址開始的前n個位元組複製到dest所指的陣列中,並返回dest。

現在我們來看看字元的內容「hello\0」,因為/0一般不

會寫出來,所以應該是6個位元組,並不是5個位元組。

一定要熟悉函式的引數,和原型才能用,否則容易出現問題。 2.

#define buffer_size 256

void getmemory(char **ppszbuf)

ppszbuf = (char*)malloc(buffer_size);

return;

}void test()

這道題,我們先捋一下,他的意思就是讓pszbuf指標指向一段開闢好的空間,然後再呼叫strcpy將

字串傳進空間裡,想法不錯,

但是函式體內問題很大,大家都知道,函式體內的都是臨時變數,所

以當你使用完畢這個函式也不例外裡面除了malloc出來的空間

被存入堆中,剩下的空間都歸還給操作

系統了,所以這個時候,用來記錄你開闢的空間的指標ppszbuf也被釋放了,也就造成了記憶體

洩漏。還有,當你走到test函式中strcpy中的時候時,pszbuf指標並沒被改變還是為空,這時候就出現了

記憶體訪問越界,

程式崩

潰。若是想改正,你可以將getmemory函式中的ppszbuf指標return出來,這時

候你就有開闢空間

的位址了。

3.

unsigned long func_8(unsigned long ulcount)

return ulsum;

}

這道題呢,我們只看到乙個迴圈,他的意思大家應該很容易明白,他想算ulcount從0加到它本身的值,

但是我們看乙個數字之前應

該知道他的型別,這個乙個無符號長整型的數字,這種型別是沒有負數的,

如果他到0的時候,在減一,就會變成型別可以表示的最

大值4294967295 也就是 (2^32 - 1),很明顯

這個迴圈

就是乙個死迴圈,所以我們在處理問題是一定要先看好他的型別,型別很重

要! 4.

char* getstr(char *p)

void main()

return;

}

這個題呢,其實很容易找到的,我們看啊,函式是返回p指標,把那段空間算是返回來了,但是呢

沒有人接受他!!!,main函式中

從始至終str沒有接收過那段空間,它在函式中雖然被定義了,

但是那是形參

啊,出了函式就不認賬了,形參出了函式會釋放,返回

來的p,你又沒有接收,str

還為空,所以呢,

記憶體訪問越界,str裡面啥都沒有,你還要輸出,所以就有問題了。

記住,形參是實參的乙份臨時拷貝。

5.

void varinit(unsigned char *pucarg)

void test()

這個題還是型別的問題,這樣吧,我畫一張圖說明一下問題。

現在我們看出來當你要列印出 ulgloba,那你就要做好心理準備了,因為它列印出來絕對不是1.

原因圖里已經很清楚了

6. aaa的初衷是gui_show_image這句**的執行加上限制條件.

gui_push_clip();

#ifdef aaa

if (show_status = mmi_ture)

#endif

#ifdef bbb

gui_show_image(x, y, image_id);

#endif

gui_pop_clip();

updata_dt_display();

.......

這道題跟巨集帶了一點關係,巨集我以前寫過一大串,這道就簡略說了,我們首先看到aaa 和 bbb是分開定義的,但是

這樣做就有可能

使bbb的巨集定義失效,應該讓他們的內容寫在乙個巨集中。

因為我學習c語言也沒多久,算不上好的,所以有什麼不足

多謝指出來,先寫這麼多,以後應該會有補充。

2020 12 29 常見R語言執行bug

r語言執行bug error in function classes,fdef,mtable unable to find an inherited method for function select for signature data.frame 常在使用dplyr包時出現這種情況 data ...

C語言特性BUG

1.關鍵字const並不能把變數變成常量,在乙個符號前加上const限定符只是表明這個符號不能被賦值。也就是說它的值對於這個符號來說是唯讀的,但它並不能防止通過程式的內部的方法來修飾這個值。const最有用之處就是用它來限定函式的形參。這樣該函式將不會修改指標所指的資料。const和 的組合通常只用...

常見bug分類

2020年 第三期 python全棧測試開發 網路課程於4月下旬開班 感興趣的小夥伴戳此圖示qq聯絡 作為測試新人,很多學員在工作中不知道從 進行下手進行測試,即使發現了問題也不確定是不是bug,從而導致非問題 重複bug等現象,現根據測試過程中比較常的問題進行分類,並針對這些問題怎樣進行驗證提出了...