您的位置:首页 > 编程语言 > C语言/C++

C++ 指针 --指针高级--<高质量编程>

2011-11-17 14:05 260 查看
// -----------------------------------------------
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 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: