// execise2.cpp : Defines the entry point for the console application.
//
#include " stdafx.h "
#include < iostream >
#include <stdio.h>
#include <tchar.h>
using namespace std;
// -----------------------------------------------
void GetMemory1( char * p)
{
p = ( char * )malloc( 100 );
}
void Test1( void )
{
char * str = NULL;
GetMemory1( str );
strcpy(str, " hello world " );
printf(str);
}
// -----------------------------------------------
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);
}
}
// -----------------------------------------------
main()
{
// -----------------------------------------------
// 请问运行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();
// -----------------------------------------------
}
分享到:
相关推荐
56<br><br>第8章 C++函数的高级特性... 57<br><br>8.1 函数重载的概念... 57<br><br>8.2 成员函数的重载、覆盖与隐藏... 60<br><br>8.3 参数的缺省值... 63<br><br>8.4 运算符重载... 64<br><br>8.5 函数内联... 65...
### 林锐-高质量C/C++编程指南 #### 概述 《林锐-高质量C/C++编程指南》是一份由林锐博士编撰的专业文档,旨在为C/C++开发者提供一套规范化的编程指导原则。这份文档对于希望提升编程技能、编写出高质量代码的C++...
了解如何正确地分配和释放内存,以及如何使用智能指针避免内存泄漏,都是VC高级编程中的重要内容。此外,了解堆栈与堆的区别,以及何时选择动态内存分配,也是必要的。 ### 3. 模板元编程 模板元编程是C++中的一种...
但同时,不当的指针使用也可能引入错误和隐患,如空指针引用、悬挂指针、内存泄漏等,因此在编写高质量的C++代码时,应确保对指针操作有清晰的理解和严格的管理。通过深入学习和实践,可以更好地掌握这一关键工具,...
### 电子-高质量C编程林锐.pdf 知识点概览 #### 1. 文件概述与版本信息 - **文件名称**:“电子-高质量C编程林锐.pdf” - **作者**:林锐博士 - **文件状态**:正式文件 - **完成日期**:2001年7月24日 - **版本...
《林锐 - 高质量C++/C编程指南》是一本深入探讨C++和C语言编程实践的经典著作,旨在帮助程序员提升代码质量和编程效率。本书不仅涵盖了C++的基础语法和特性,还着重强调了良好的编程习惯和设计原则,是每一位C++/C...
《C语言高级教程-上海贝尔》是一本深入探讨C语言编程技术与规范的教程,特别强调了在实际开发中遵循的编程标准。本教程源于上海贝尔公司的内部编程规范,旨在帮助程序员提高代码质量和可维护性,是C语言学习者进阶的...
《C编程精粹》是由Steve Maguire撰写的一本关于C语言高级编程的书籍,它针对已经掌握C语言基础的读者,旨在深入探讨C语言的精髓和最佳实践,以提升编程技巧和代码质量。这本书在C语言的学习者和开发者中享有很高的...
8. **异构集合与泛型接口**:如`IEnumerable<T>`和`IQueryable<T>`接口,以及它们对应的实现如`List<T>`和`Dictionary<TKey, TValue>`,这些集合和接口提供了灵活的数据存储和遍历方式。 9. **元编程与反射**:C#中...
《林瑞博士C++高质量编程》是一本深受程序员喜爱的经典著作,主要针对C++语言,旨在帮助读者构建高质量、高效且可维护的代码。作者林锐博士以其深厚的编程经验和独特的见解,为读者揭示了C++编程中的关键技术和最佳...
除了这些基础内容,《C/C++高质量编程指南》还深入探讨了命名约定、异常处理、内存管理等高级话题。例如,在命名约定方面,作者强调了其对代码可读性和一致性的贡献,提倡开发者遵循一套统一的命名规则,从而提升...
《C++高质量编程经典版》作为一本专注于提升C++编程质量的书籍,自2001年首次出版以来,便成为了程序员提高编程水平的宝贵资源。 本书由林锐博士撰写,书中不仅包含了大量的编程知识,还融入了作者多年来在软件开发...
《C语言高质量编程书籍》是一本致力于提升C语言编程技巧的专业读物,旨在帮助程序员编写出更高效、更可靠、更易于维护的代码。书中的内容深入浅出,结合实际项目案例,使得学习过程既有趣又有挑战性。下面将详细探讨...
在深入探讨《高级编程指南以及高质量C++编程》这一主题之前,我们首先需要理解C++语言的核心特性及其在软件开发中的重要性。C++是一种通用的、面向对象的编程语言,以其高效、灵活和强大的功能著称。它不仅继承了...