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


     

    // ----------------------------------------------- 
    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 

  • 相关阅读:
    App分享微信小程序
    PHP-FFMpeg 操作视频/音频文件 (转)
    用户画像
    phpcms中的RBAC权限系统
    PHPExcel生成excel
    OPNET中节点模型中包流的索引号的含义
    删除opnet之前保存或打开的目录后每次打开总会提示warning
    opnet 的学习方法有感
    win10:两款轻量级美化软件使用技巧(StartlsBack++与RocketDock)
    任务栏透明
  • 原文地址:https://www.cnblogs.com/linlf03/p/2252613.html
Copyright © 2020-2023  润新知