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
相关文章推荐
- <林锐高质量c/c++编程指南>记录 <续>
- <<高质量c/c++编程指南>>读书笔记1
- <林锐高质量c/c++编程指南>记录
- <<高质量c/c++编程指南>>读书笔记1
- C/C++ 高质量编程--内存,二重指针,指针的高级使用解析 3
- C和C++语言学习总结(资料来自<高质量C++/C 编程指南> 林锐博士 2001 年7 月24)
- apue.h <<UNIX 环境高级编程>> 第二版 环境配置
- <C/C++> FILE指针的使用
- <<UNIX环境高级编程>>apue.h头文件的配置
- C++文本查询程序 定义类管理数据 用智能指针 用StrBlob代替vector<string> C++Primer 练习12.32
- <<C和指针>>第1章之编程练习心得20140704
- 高质量C++/C编程指南 -- 第8章 C++函数的高级特性
- <<c++ primer>> 函数指针的笔记
- C++文本查询程序 定义类管理数据 用智能指针 用StrBlob代替vector<string> C++Primer 练习12.32
- <<C和指针>>第1章之编程练习心得20140702
- 【c++高级】不得不学的<math>
- <<UNIX环境高级编程>>之第十章理解
- <<UNIX环境高级编程>>学习总结——第四章:文件和目录
- C++ <利用指针翻转字符串>
- <C++>指针和二维数组