這陣子寫了一堆 C 的 func 搞了一點 point 的東東
其中有件事讓我印象很深 特別記一下
由於前一次開發較大型的系統是使用 Java
我在 Java 上習慣設計一些很方便的 function 在此以數字加減運算當做例子
String getValueByI( int x ); // 傳入整數 轉換成字串回傳
int getValueByS( String s ); // 傳入字串 轉換成整數回傳
如此 我可以使用
String result = getValueByI( getValueByS( "5566" ) + 7788 );
這樣我可以方便地做數字跟字串的轉換和運算 結果我在 C 這邊使用:
uchar* getValueByI( int x );
int getValueByS( uchar* s );
使用:
uchar * result = getValueByI( getValueByS( "5566" ) + 7788 );
其實看上面一次好像沒什麼錯 來跑個迴圈吧
uchar* getValueByI( int x ){
uchar* tmp;
tmp = malloc( sizeof(uchar) * 10 );
sprintf( tmp , "%d" , x );
tmp[9] = '\0';
return tmp;
}
int main(){
uchar* result, *tmp;
while( 1 ){
if( tmp == NULL )
result = getValueByI( getValueByS( "5566" ) + 7788 );
else
result = getValueByI( getValueByS( tmp ) + 7788 );
tmp = result;
}
return 0;
}
如此一來 tmp 之前所指的空間 會一直忘記 free 掉
只是不斷地接另一個新的空間
出錯的問題很簡單 那就是我在 getValueByI 裡進行 malloc 來回傳出來
這個用法我覺得很直觀 但其實 C 並沒有 Java 的 garbage collection
所以更正確的用法是用完必須 free 掉 特別是開發給 Server 用的
結果我一連寫了10個 function 都是這種 style 囧rz
這下不知要改多少啊 XD
沒有留言:
張貼留言