不熟悉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