分类:
2011-12-20 05:03:46
原文地址:几个常见的有关内存操作【摘至一些笔试题】 作者:jonas_mao
以下例子都在GCC下make 了一把,符合程序后面的解答:
请问运行Test函数会有什么样的结果?
答:程序崩溃。
因为GetMemory并不能传递动态内存,
Test函数中的 str一直都是 NULL。
strcpy(str, "hello world");将使程序崩溃。
请问运行Test函数会有什么样的结果?
答:可能是乱码。(ps:这里可能和编译器有关,试过自己的机子上GCC是NULL的)
因为GetMemory返回的是指向"栈内存"的指针,该指针的地址不是 NULL,但其原现的内容已经被清除,新内容不可知。
请问运行Test函数会有什么样的结果?
答:
(1)能够输出hello
(2)内存泄漏,因为strcpy遇到'\0'停止,此时str所指的堆空间中hello后面的内存并不是'\0',所以printf会出现内存泄露 (ps: 在自己机子上编译运行没有出现,可能编译器做了优化 ?)
请问运行Test函数会有什么样的结果?
答:篡改动态内存区的内容,后果难以预料,非常危险。
因为free(str);之后,str成为野指针,
if(str != NULL)语句不起作用。(ps:会有乱码)