2009年11月14日 星期六

coverity初體驗


最近在玩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。



真的理解C嗎?


昨天忽然搜尋到真的理解 C 語言的 types 嗎?後,自己在拜讀一下C99的standard,才發現自己真的對C感到很陌生,忽然對文中的"20年的工作經驗不過是一年的經驗,重複了20年"感觸頗深。
就以自己的工作經驗而言,常常發現許多工作好幾年的人與其年資完全不符,似乎是進來的沒多,而抱怨著,寫code不會賺錢,先不論寫code會不會賺錢,其實,自己的年資已經和累積的經驗已經有差距了,如何讓工作不再變成只是重複性的工作,我想這是任何一個programmer應該思考的議題。




vmware的timekeeping問題


您是不是常常被vmware抱怨CPU速度和偵測到的速度不符合,這是由於x86的power-saving讓CPU降頻執行所導致,解決的方法就是告知vmware,CPU的正確頻率是多少,找到設定檔config.ini,然後設定CPU頻率:
  • Windows 2000 or XP - %AllUsersProfile%\Application Data\VMware\<VMware-Product>\config.ini
  • Windows Vista or Windows 7 - C:\ProgramData\VMware\VMware\<VMware-Product>\config.ini

不存在的話就自行建立新檔,並且將以下字串貼入其中:
host.cpukHz = "2000000"
      host.noTSC = "TRUE"
      ptsc.noTSC = "TRUE"

"2000000"是我的電腦速度2G,請依照您的頻率調整。 參考資料:
http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1227



熱門文章