void
test(void)
{
char *str = NULL;
get_memory(str);
strcpy(str, "hello world");
printf("%s\n", str);
}
void
get_memory(char *p)
{
p = (char *)malloc(sizeof(char) * 100);
}
拿到這道題的時候,感覺都對着呢,剛開始以爲是malloc()申請完空間,函數結束釋放了,可後來想到如果malloc()申請的空間沒有free(),則此空間仍然存在,所以不是這個問題。那我就想會不會是內存泄漏呢?因爲申請的空間沒有free(),而且strcpy也是一個不安全的函數,也有可能造成內存泄漏,可是考點真的是這個麼,我猶豫了,因爲就算不釋放,也不會影響到程序的運行結果。
回來後,我調試這個程序,運行結果是段錯誤。按照自己的想法對代碼進行了修改,依然是段錯誤。調試的時候,發現get_memory()中p的值的確是一個地址,而打印test()中的str的地址卻是0。看來p並沒有真正的返回到str中。
其實,我們要修改的是指針,下面是正確的代碼段(加粗斜體部分是修改的部分):
void
test(void)
{
char *str = NULL;
get_memory(&str);
strcpy(str, "hello world");
printf("%s\n", str);
}
void
get_memory(char **p)
{
*p = (char *)malloc(sizeof(char) * 100);
}
覺得自己很菜啊,一定要認真,仔細的看題,平時一定要多多實踐。