[問題] string token 及calloc

看板C_and_CPP (C/C++)作者 (fire)時間13年前 (2013/02/21 11:34), 編輯推噓1(104)
留言5則, 3人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Linux 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) stdio 問題(Question): 這是個面試題目,題面就是給str_parser Function, 及main下的src及dst_token, 主要目的是在function內malloc給傳進來的dst_token指標 陣列,將token的字串放在指標中,並在main中做free 現在遇到的問題是, 執行到free時,沒指向同一塊dst_token記憶體,所以free錯誤 請版上的大大指教 程式碼(Code):(請善用置底文網頁, 記得排版) #include <stdio.h> #include <stdlib.h> #include <string.h> int str_parser(const char *src, char *dst_token[], int max_token_count) { if(src == NULL || max_token_count <=0){ return -1; } char src_char[26]; memset(src_char, 0, sizeof(src_char)); strcpy(src_char, src); int count = 0; char *delim = " "; char *p; printf("1, %s\n", src_char); p = strtok(src_char, delim); while(p != NULL) { printf("%d\n", count); if(count > 3){ printf("token count(%d) > max token count(%d)\n", count, max_token_count); return 0; } dst_token[count] = (char*) calloc(sizeof(char), 12); printf("dst_token[%d] = address %x\n", count, dst_token[count]); if(dst_token[count] == NULL){ printf("Calloc error in count(%d)\n", count); return -1; } dst_token[count] = p; printf("token string %s, p %s\n", dst_token[count], p); count++; p = strtok(NULL, delim); } return 0; } int main() { char *src = "a bb ccc"; char *dst_token[100]; int ret = 0; int i = 0; ret = str_parser(src, &dst_token, 100); for(i=0; i<3; i++){ if(ret == 0) { printf("free %d %x, %s\n", i, dst_token[i], dst_token[i]); free(dst_token + i); } } return 0; } 補充說明(Supplement): -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.134.94.102 ※ 編輯: wtuxxj 來自: 220.134.94.102 (02/21 11:39)

02/21 13:22, , 1F
dst_token[count] = p 改成 strcpy(dst_token[count], p)
02/21 13:22, 1F

02/21 14:28, , 2F
這兩個是point可以直接assign
02/21 14:28, 2F

02/21 14:51, , 3F
不行,因為你會把原本配置的位址蓋掉,最後無法 free
02/21 14:51, 3F

02/21 18:49, , 4F
如果直接 assign, 就是指到 src array 上, memory leak
02/21 18:49, 4F

02/21 20:15, , 5F
感謝兩位
02/21 20:15, 5F
文章代碼(AID): #1H9PNDeH (C_and_CPP)
文章代碼(AID): #1H9PNDeH (C_and_CPP)