且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

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

更新时间:2022-09-15 21:34:45

// -----------------------------------------------
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,如需转载请自行联系原作者