問個C語言關於free的小問題
void Test(void)
{
char *str = (char *) malloc(100);
strcpy(str, “hello”);
free(str);
printf(str);
}
}
函數運行結果為將“hello”打印出來了。
問下把hello拷貝到了*str指向的內存後,接著就把*str指向的內存釋放了,為什麼最後還能打印出“hello”呢?
我認為*str所指向的、保存hello的內存已經free(不存在)了,所以hello也不應該被打印出來。
void Test3(void)
{
char *str = (char *) malloc(100);
char *tmp = strcpy(str, "hhhhello");
// char *ttt = "sss";
// char *tmp = str;
free((void *)str);
printf("%s\n", tmp);
if(str != NULL)
{
// strcpy(str, "-> world\n");
printf(str);
}
// printf(str);
printf("%s\n", tmp);
}
最佳回答:
釋放掉了內存,但是內存沒有清空,數據還在那個地方,指針還指向那個地方,過一會這段內存就會被內存分給別人了,到時候就打印不出來了。