我想知道爲什麼下面的代碼isnt't工作分配內存和保存串在C
int main(int argc, char **argv)
{
char *test = (char*) malloc(12*sizeof(char));
test = "testingonly";
free(test);
}
考慮這件事後,我的假設是,我第一次在內存12個字符,但在分配分配空間下一行在棧上創建一個char數組,並將其內存地址傳遞給測試。所以free()試圖釋放堆棧中不允許的空間。那是對的嗎?
那麼在堆上保存字符串的正確方法是什麼?以下是常用的方法嗎?
int main(int argc, char **argv)
{
char *test = (char*) malloc(12*sizeof(char));
strcpy(test, "testingonly");
free(test);
}
第一溶液示出了經典的內存泄漏;你得到一個指向一些分配的內存的指針,然後當把指針指向字符串文字指向'test'時,它就失去了唯一的引用。此後,沒有合法的方式來引用分配的內存 - 泄漏。 – 2011-12-22 06:44:32
永遠不要在C中綁定malloc的結果,這是毫無意義的,只能隱藏錯誤和編譯器警告。 – Lundin 2011-12-22 07:37:29
是 - 使用'strcpy'或'strncpy'或'memcpy'。 strncpy比strcpy更好,因爲它有助於避免在最多N個字符處複製時出現緩衝區溢出問題。 – 2011-12-22 08:55:29