以文本方式查看主题 - 计算机科学论坛 (http://bbs.xml.org.cn/index.asp) -- 『 C/C++编程思想 』 (http://bbs.xml.org.cn/list.asp?boardid=61) ---- 关于内存分配的小问题 (http://bbs.xml.org.cn/dispbbs.asp?boardid=61&rootid=&id=15826) |
-- 作者:greenlixiao -- 发布时间:3/19/2005 8:18:00 PM -- 关于内存分配的小问题 问题一: char *GetMemory(void) { char p[] = "hello world"; return p; } void Test(void) { char *str = NULL; str = GetMemory(); printf(str); } 请问运行Test函数会有什么样的结果? 结果却是: returning address of local variable or temporary 但若改成char *p = "hello world"; 则结果为hello world 不知道为什么? 问题二: |
-- 作者:Lis -- 发布时间:3/31/2005 10:49:00 AM -- 2005-3-19,到现在没人回答,唉,我说说吧。 问题一: 问题二: 就这些,希望对你有帮助,也希望我说的没错。(!:)) |
-- 作者:Lis -- 发布时间:3/31/2005 10:54:00 AM -- 补充两句,我说那个程序是“很不正常”的是因为, 当你的内存被 free 掉了之后,那个指针变量已经是一个野指针了,或者说,你指向的位置不是你的地盘了,而你接下来给它 strcpy 是不应该的,是很危险的。 |
-- 作者:greenlixiao -- 发布时间:4/2/2005 3:14:00 AM -- 非常感谢你! 你说得很好,我明白了 回去好好学习编译原理的东西,多动手多思考 再次感谢! PS:第二个程序是很不正常,因为这只是一个题目。希望我以后能够尽量不犯这种错误 |
-- 作者:eyounx -- 发布时间:4/2/2005 10:50:00 AM -- 第一个问题, 前一种方法字符串在堆中,后一种方法字符串在数据区 |
-- 作者:scanf -- 发布时间:4/10/2005 2:50:00 PM -- 学习 |
W 3 C h i n a ( since 2003 ) 旗 下 站 点 苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》 |
250.000ms |