// -----------------------------------------------
char
* GetMemory2(
void
)
{
char
p[] =
" hello world "
;
return
p;
}
void
Test2(
void
)
{
char
* str = NULL;
str = GetMemory2();
printf(str);
}
// -----------------------------------------------
void
GetMemory3(
char
** p,
int
num)
{
* p = (
char
* )malloc(num);
}
void
Test3(
void
)
{
char
* str = NULL;
GetMemory3( & str, 100 );
strcpy(str,
" hello "
);
printf(str);
}
// -----------------------------------------------
void
Test4(
void
)
{
char
* str = (
char
* ) malloc( 100 );
strcpy(str,
" hello "
);
free(str);
if
(str != NULL)
{
strcpy(str,
" world "
);
printf(str);
}
}
|
// -----------------------------------------------
/* 请问运行Test1函数会有什么样的结果?
答:程序崩溃。
因为GetMemory并不能传递动态内存,
Test函数中的 str一直都是 NULL。
strcpy(str, "hello world");将使程序崩溃。 */
Test1();
// -----------------------------------------------
// 请问运行Test2函数会有什么样的结果?
//
// 答:可能是乱码。
//
// 因为GetMemory返回的是指向“栈内存”的指针,
// 该指针的地址不是 NULL,但其原现的内容已经被清除,新内容不可知。
Test2();
// -----------------------------------------------
// 请问运行Test3函数会有什么样的结果?
//
// 答:
//
// (1)能够输出hello
//
// (2)内存泄漏
Test3();
// -----------------------------------------------
// 请问运行Test函数会有什么样的结果?
//
// 答:篡改动态内存区的内容,后果难以预料,非常危险。
//
// 因为free(str);之后,str成为野指针,
//
// if(str != NULL)语句不起作用。
Test4();
// -----------------------------------------------
|
源地址:http://www.cppblog.com/mzty/archive/2006/07/07/9536.html
本文转自Work Hard Work Smart博客园博客,原文链接:http://www.cnblogs.com/linlf03/archive/2011/11/17/2252613.html,如需转载请自行联系原作者