不熟悉C,請糾正我的錯誤。爲什麼c字符串被釋放?
這裏的一些代碼:
void db_cstr(char* cstr, int len) {
char* temp2 = cstr;
cstr = (char*)malloc(len*2*sizeof(char));
// print 1
printf(cstr);
printf("\n");
//print 2
printf(temp2);
printf("\n");
strcpy(cstr, temp2);
//free
free(temp2);
//print 3
printf(cstr);
}
int somefunction(){
int array_len = 10;
char* cmd = (char*)malloc(array_len*sizeof(char));
strcpy(cmd, "apple");
db_cstr(cmd, array_len);
// final print
printf(cmd);
return 1;
}
我的價值觀(永遠)//打印1 == 「」 和//打印2 == 「蘋果」 和//打印3 == 「蘋果」。但是,當我做最後的打印時,printf什麼都不打印。我認爲這與免費(temp2)有關;所以當我評論它最後的印刷品是「蘋果」。我相信這是因爲某些函數中的orignal cmd指針仍然指向temp2中釋放的數組。你如何讓cmd指針指向新的cstr在db_cstr中指向的內容。 (我不希望db_cstr返回任何東西)。
'somefunction'中的最後一個'printf'可以打印任何東西,包括垃圾,因爲'cmd'在'db_cstr'中被釋放。你在'db_cstr'中也有內存泄漏,因爲你沒有釋放你在那個函數中分配的內存。 – 2012-01-12 13:27:38