最近在玩coverity,安裝設定上看看手冊大家應該都不成問題,不過在設定green hill可能會遇到小小的問題,就是coverity用__ghs,而一般的code則使用__ghs__,所以要小改一下。
再來就是幫忙review code的看法,以及新手常犯的錯誤,拿出來一起討論一下吧:
Return Address Of Local Variable
由於local variable的address存在stack之中,當程式結束後stack就會被回收,於是存取這塊記憶體時,就會變成invalid access。錯誤的Example
#define SIZE 10 char* test() { char s[SIZE]; strcpy(s, "hello"); return s; }幸運的是,GCC通常會出現"warning: function returns address of local variable"提醒Programmer。
基本上,可以使用malloc或者由外面傳進來:
Example
char* test() { char *s; s = (char *) malloc(sizeof(char) * SIZE); strcpy(s, "hello"); return s; }或者
char* test(char *s, int len) { strncpy(s, "hello", len); return s; }個人比較偏愛由外面傳進來,再由外面的函數負責free resource。
沒有留言:
張貼留言