c 深度剖析 5

1,指针没有指向一块合法的区域

1指针没有初始化





1

2

3

4

5

6

7

8

9

10

11

12

13

#include <stdio.h>

#include <string.h>

struct
aa

{

    char 
*pa;

    char
c;

}ssa,*ssb;

void 
main()

{

strcpy(ssa.pa,"abc");

printf("%s \n",ssa.pa);

}





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

struct
aa

{

    char 
*pa;

    char
c;

}ssa,*ssb;

void 
main()

{

ssb=(struct
aa *)malloc(sizeof(struct
aa));

strcpy(ssb->pa,"ac");

printf("%s \n",ssb->pa);

}

ssa 定义时 只给
pa指针分配了内存,内存没有初始化,指针指向的地址是随机的(在GCC 中好像未初始化的指针指向 0)。

malloc 只给 ssb 初始化了,没有给 pa初始化。

故访问指针指向的地址时会出现错误。

必须对指针进行初始化





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

struct
aa

{

    char 
*pa;

    char
c;

}ssa,*ssb;

void 
main()

{

ssa.pa=malloc(sizeof(char));

strcpy(ssa.pa,"ac");

printf("%s \n",ssa.pa);

}

2,没有分配足够的空间





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

struct
aa

{

    char 
*pa;

    char
c;

}ssa,*ssb;

void 
main()

{

printf("%d\n",sizeof(struct
aa));

ssb=malloc(sizeof(int));

ssb->c=‘D‘;

printf("%c \n",ssb->c);

printf("address of ssb ->%d\n",ssb);

printf("address of ssb.pa ->%d\n",ssb->pa);

printf("address of ssb.c ->%d\n",&(ssb->c));

}

书上说的例子好像不太对。

结构体为指针加char 按照4字节对齐需要8字节的空间。

malloc了4个字节的空间,依然可以访问。

书上的例子的错误是结构体内的指针没有初始化,而不是空间分配太小。

但是从规范上来说应该:





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

struct
aa

{

    char 
*pa;

    char
c;

}ssa,*ssb;

 

void 
main()

{

ssb=(struct
aa *)malloc(sizeof(struct
aa));

ssb->c=‘D‘;

printf("%c \n",ssb->c);

}

3.





1

2

3

4

5

6

7

8

9

10

11

12

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

void 
main()

{

char
*pa="abcdefg";

char
*pb;

pb=malloc(sizeof(char));

strcpy(pb,pa);

printf("%s \n",pb);

}

不知道是编译器不符合规范还是其他原因。依旧不会出错。

4 数组越界





1

2

3

4

5

6

7

#include <stdio.h>

void 
main()

{

int
pa[3]={1,2,3};

printf("%d \n",pa[4]);

}

GCC对数组越界不进行任何处理,没有错误警告。

5 内存泄漏

内存要及时 free

6 内存释放

1。free后依然可以通过指针变量访问内存,要将 指针变量 p=NULL

2.在子函数中内部定义了一个数组,函数返回数组的指针。子函数中定义的数组,在函数返回时会自动销毁,返回的指针指向数组的内存,

3,内存使用太复杂,不知道那块已释放,那块未释放。

来自为知笔记(Wiz)

c 深度剖析 5,布布扣,bubuko.com

时间: 2024-11-06 14:46:35

c 深度剖析 5的相关文章

[ 1011] &lt;&lt;C语言深度剖析&gt;&gt; 测试 TEST

/******************************** **  wzsts<C语言深度剖析>2016 ** **                    ** **     fun1~fun6代表6章节内容 ** **fun10~fun19代表fun1所调用函数 ** **                    ** **     世界因规则而美好     ** ** #if(1)可运行,#if(0)不运行. ** ** Data  Author   PC       ** **16

横瓜先生深度剖析QQ空间前端后端技术AJAX与FORM等等

[皇帝]北京-横瓜-7年(601069289)  22:06:34 [元帅]横瓜-PHP教父(601069289)  21:35:29 这里是QQ空间的图片上传方法 是FLASH 我草 [元帅]横瓜-PHP教父(601069289)  21:36:31 竟然不是JS QQ空间用FLASH 图片上传方法 [元帅]横瓜-PHP教父(601069289)  21:37:35 至此,整个QQ空间的技术,已经全部被我破解 @IT柏拉图 [元帅]IT柏拉图(2500875)  21:38:11 你真是天才,

【源码】StringBuilder和StringBuffer源码深度剖析

//------------------------------------------------------------------------ 写篇博客不容易,请尊重作者劳动成果.转载请注明出处:http://blog.csdn.net/chdjj //------------------------------------------------------------------------ 我觉得要通过源码研究一个类,应该先从整体上了解这个类,比如说这个类的继承体系,有哪些超类,继承

深度剖析WordPress主题结构(转)

利用强大的技术,可以把基于wordpress的网站做成各种各样的形式,这除了要求wordpress主题开发人员精通html,PHP,JS,CSS等技术,还需要开发者掌握WordPress主题的框架. Gevin今天结合The anatomy of a WordPress theme这篇文章,和大家一起剖析WordPress主题的结构.原文作者用图文形式,分别从网站外观.页面组成和后台文件三个方面,形象的向大家展示了WordPress的架构,下面Gevin和大家一起分析WordPress是如何架构

DDOS学习笔记(《破坏之王-DDOS攻击与防范深度剖析》)

最近花了点时间把<破坏之王-DDOS攻击与防范深度剖析>看了一遍,坦白来说,这本书比较浅显,可以说是入门书,当然对于我这种对DDOS一知半解的人来说,也是一本不错的书,起码我学到了一些东西. DDOS是分布式拒绝服务(Distributed Denial of Service, DDOS)的简写,从名字可以看出,其攻击是分布式的,即多台(可能上万台,甚至更多)电脑同时对目标进行攻击,攻击的目的是让目标无法提供服务.从根本上来说,让目标无法提供服务,办法有很多,比如侵入目标服务器,删除关键服务或

深度剖析消息反射机制

深度剖析消息反射机制作者:hustli    摘要:在前面我们分析了控件通知消息WM_NOTIFY,和WM_NOTIFY紧密联系的还有一个MFC新特性:消息反射.本文中,我想就这个问题作一个全面的论述,如果有错误,还望各路大虾批评指正.    什么是消息反射?    在windows里面,子控件经常向父控件发送消息,例如很多子控件要绘制自己的背景,就可能向父窗口发送消息WM_CTLCOLOR.对于从子控件发来的消息,父控件有可能在处理之前,把消息返还给子控件处理,这样消息看起来就想是从父窗口反射

《AngularJS深度剖析与最佳实践》简介

由于年末将至,前阵子一直忙于工作的事务,不得已暂停了微信订阅号的更新,我将会在后续的时间里尽快的继续为大家推送更多的博文.毕竟一个人的力量微薄,精力有限,希望大家能理解,仍然能一如既往的关注和支持shuang_lang_shuo[破狼]微信号,同时也欢迎大家的高质量文章的投稿. 在2015年一年时间中,我.雪狼大叔.彭洪伟一起共同编写了<AngularJS深度剖析与最佳实践>这本前端Angular.js框架的进阶书籍.在写作期间也得到很多人的支持,特别是在Angularjs中文社区群中的各位群

深度剖析「营销QQ辅助软件」的6大自动营销功能

大家都知道,营销QQ所传播的营销思维就是"大数据管理客户,营销QQ本身具有10万好友的容量,每天可加1000个好友3000个免费消息".把它可以运用到其他个个行业和各大营销类公司,发现这个营销工具真是百搭,放在哪里都好使.基于这个营销工具,我公司总结开发出了 "针对营销QQ全自动化的营销QQ辅助软件":专注的把软件做到极致,全然自动化,用口碑营销达到快速传播的目的. 针对营销QQ全自动化的6个营销功能 首先概括一下营销QQ辅助软件在工作应该包括哪些功能.每个公司根据

Struts(一)struts2.2概述与MVC模式深度剖析

struts2.2概述与MVC模式深度剖析 1.Struts2是由webwork与struts一起组成的.struts1与struts2完全不一样.(处理前段到服务器端的交互,也就是web端) 2.通过基于请求响应( Request-Response)模式的应用Framework, 基本上有如下几个表现逻辑结构组成.– 控制器(Controller) ——控制整个Framework中各个组件的协调工作.– 业务逻辑层(Business Logic) ——对Framework本身来说, 这里仅仅只

Java记录 -25- String类深度剖析

Java中String类深度剖析 1.Java源码中String类的定义: public final class String extends Object implements Serializable, Comparable<String>, CharSequence 2.String 类代表字符串.Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现. 3.字符串是常量:它们的值在创建之后不能更改.字符串缓冲区支持可变的字符串.因为 String