// 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 编程指南,v 1.0 2001 Page 4 of 101 6.1 参数的规则. 6.2 返回值的规则. 6.3 函数内部实现的规则. 6.4 其它建议. 6.5 使用断言. 6.6 引用与指针的比较. 第7 章 内存管理 7.1 内存分配方式 7.2 常见...
高质量C++-C编程指南 目 录 前 言... 6 第1章 文件结构... 11 1.1 版权和版本的声明... 11 1.2 头文件的结构... 12 1.3 定义文件的结构... 13 1.4 头文件的作用... 13 1.5 目录结构... 14 第2章 程序的版式... 15 ...
高质量C/C++编程指南.PDF 作者:林锐 目录: 前 言 第1章 文件结构 1.1 版权和版本的声明 1.2 头文件的结构 1.3 定义文件的结构 1.4 头文件的作用 1.5 目录结构 第2章 程序的版式 2.1 空行 2.2 代码行 2.3 代码行内...
高质量C++编程指南(林锐)DOC版和pdf的合集 目 录 前 言 6 第1章 文件结构 11 1.1 版权和版本的声明 11 1.2 头文件的结构 12 1.3 定义文件的结构 13 1.4 头文件的作用 13 1.5 目录结构 14 第2章 程序的版式 15 2.1...
软件质量是被大多数程序员挂在嘴上而不是放在心上的东西! 除了完全外行和真正的编程高手外,初读本书,你最先的感受将是惊慌:“哇!我以前捏造的C++/C程序怎么会有那么多的毛病?” 别难过,作者只不过比你早几...
学完编程基本语法之后,该怎样学习,提高编程能力,相信你看了这本书会找到答案
59. 高质量的子程序 295 60. 高级C语言程序员测试必过的十六道最佳题目+答案详解 297 61. C语言常见错误 320 62. 超强的指针学习笔记 325 63. 程序员之路──关于代码风格 343 64. 指针、结构体、联合体的安全规范 ...
《高质量C++编程指南》 软件质量是被大多数程序员挂在嘴上而不是放在心上的东西! 除了完全外行和真正的编程高手外,初读本书,你最先的感受将是惊慌:“哇!我以前捏造的C++/C程序怎么会有那么多的毛病?” 别...
很深刻的关于编程上的细节讲解,我没有版权,就是为了兑换积分,发上来! 目 录 前 言 第1章 文件结构 1.1 版权和版本的声明 1.2 头文件的结构 1.3 定义文件的结构 1.4 头文件的作用 1.5 目录结构 第2章 ...
第8章 C++函数的高级特性 8.1 函数重载的概念 8.2 成员函数的重载、覆盖与隐藏 8.3 参数的缺省值 8.4 运算符重载 8.5 函数内联 8.6 一些心得体会 第9章 类的构造函数、析构函数与赋值函数 9.1 构造函数与析构函数的...
高质量C编程指南 一本不错的书 林锐 博士 目 录 前 言 6 第1章 文件结构 11 1.1 版权和版本的声明 11 1.2 头文件的结构 12 1.3 定义文件的结构 13 1.4 头文件的作用 13 1.5 目录结构 14 第2章 程序的版式 15 2.1 ...
高质量C++C编程指南 第1章 文件结构 * 1.1 版权和版本的声明 * 1.2 头文件的结构 * 1.3 定义文件的结构 * 1.4 头文件的作用 * 1.5 目录结构 * 第2章 程序的版式 * 2.1 空行 * 2.2 代码行 * 2.3 代码行内的空格 * 2.4...
高质量C++/C编程指南 目 录 前 言 6 第1章 文件结构 11 1.1 版权和版本的声明 11 1.2 头文件的结构 12 1.3 定义文件的结构 13 1.4 头文件的作用 13 1.5 目录结构 14 第2章 程序的版式 15 2.1 空行 15 2.2 代码行 ...
大佬写的C编程指南与规范,要学好C必看 本书第一章至第六章主要论述 C++/C 编程风格。难度不高,但是细节比较多。别小 看了,提高质量就是要从这些点点滴滴做起。世上不存在最好的编程风格,一切因需求 而定。团队...
第8章 C++函数的高级特性... 57 8.1 函数重载的概念... 57 8.2 成员函数的重载、覆盖与隐藏... 60 8.3 参数的缺省值... 63 8.4 运算符重载... 64 8.5 函数内联... 65 8.6 一些心得体会... 68 第9章 类的构造...