- 博客(61)
- 资源 (42)
- 收藏
- 关注
转载 free之后要记得指针置空
别看 free 和delete 的名字恶狠狠的(尤其是delete),它们只是把指针所指的内存给释放掉,但并没有把指针本身干掉。用调试器跟踪示例程序,发现指针p 被free 以后其地址仍然不变(非NULL),只是该地址对应的内存是垃圾,p 成了“野指针”。如果此时不把p 设置为NULL,会让人误以为p 是个合法的指针。如果程序比较长,我们有时记不住p 所指的内存是否已经被释放,...
2019-03-04 19:55:49
2224
转载 C语言中变量的作用域和生命周期
谭浩强书:从存储模型可以看到,谭浩强和钱能的模型有一定的对应关系: 静态存储区 -> 全局数据区 动态存储区 -> 栈(stack)变量的类型: 1. 局部变量和全局变量 局部变量也称为内部变量。 局部变量是在函数内作定义说明的。其作用域仅限于函数内, 离开该函数后再使用这种变量是非法的。 全局变
2016-04-06 17:55:12
11270
2
转载 free(p)后指针问题
笔试很喜欢考这些 #include #include #include int main(){ char *str = (char *)malloc(100); strcpy(str, "hello"); free(str); if(str != NULL) { strcpy(str, "world"); p
2016-04-06 17:38:24
713
1
转载 全局变量和局部变量在内存里的区别
一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。3、全局区(静态区)(static)—,
2016-04-06 17:35:43
661
转载 CentOS(RedHat)中sendmail和sm-client启动慢的解决方法
我在装了red hat enterprise linux5.5后,将linux的主机名修改了之后,再rebootho
2014-08-19 17:23:19
834
转载 从spin_lock()到spin_lock_irqsave()
Spinlock的目的是用来同步SMP中会被多个CPU同时存取的变量。在Linux中,普通的spinlock由于不带额外的语义,是用起来反而要非常小心。在Linux kernel中执行的代码大体分normal和interrupt context两种。tasklet/softirq可以归为normal因为他们可以进入等待;nested interrupt是interruptcontext
2014-08-14 15:22:23
1470
转载 mkimage工具讲解
uboot源代码的tools/目录下有mkimage工具,这个工具可以用来制作不压缩或者压缩的多种可启动映象文件。mkimage在制作映象文件的时候,是在原来的可执行映象文件的前面加上一个0x40字节的头,记录参数所指定的信息,这样uboot才能识别这个映象是针对哪个CPU体系结构的,哪个OS的,哪种类型,加载内存中的哪个位置, 入口点在内存的那个位置以及映象名是什么./mkima
2014-07-22 10:14:16
558
转载 ARM Linux 3.x的设备树(Device Tree)
1. ARM Device Tree起源Linus Torvalds在2011年3月17日的ARM Linux邮件列表宣称“this whole ARM thing is a f*cking pain in the ass”,引发ARM Linux社区的地震,随后ARM社区进行了一系列的重大修正。在过去的ARM Linux中,arch/arm/plat-xxx和arch/arm/mach
2014-07-21 17:02:39
426
转载 Image uImage zImage U-Boot的区别
转于:http://kmoving.blog.163.com/blog/static/20504919720123151533819/(1)、内核编译(make)之后会生成两个文件,一个Image,一个zImage,其中Image为内核映像文件,而zImage为内核的一种映像压缩文件,Image大约为4M,而zImage不到2M。那么uImage又是什么的?它是uboot专
2014-07-21 17:00:42
426
转载 U-boot在S3C2440上的移植详解
U-boot在S3C2440上的移植详解http://www.embeddedlinux.org.cn/html/jishuzixun/201303/16-2499.html一、移植环境· 主 机:VMWare--Fedora 9· 开发板:Mini2440
2014-07-21 14:41:32
1380
转载 今天刚知道原来参考文献可以自动生成
毕业论文不同于一般的小论文,特别是硕士毕业论文或者博士毕业论文。一般的小论文就四五页,而硕士论文动辄五六十页,有的甚至七八十页。所以有些东西如果要人工的去修改,将是一件非常痛苦的事情。痛苦的事情至少有两个:目录自动生成和编号、参考文献引用的上标。本文将从这两个方面说说小技巧,自动生成,非常方便。 先说两种痛苦情况。 设定好文章的目录结构后,突然发现中间要添加或者删除
2014-01-18 16:36:06
2462
转载 五险一金(普及贴)
养老保险: 一般要交满15年,到退休的时候才能终生享受养老金,所以想拿养老金的人请务必在自己退休前15年就开始交。如果到退休年龄交养老保险不满15年,那等到你退休的时候国家会把你个人帐户上存的8%的养老金全部退给你。那单位给你交的21%到哪里去了?国家把单位为你交的21%的钱全部划到国家的养老统筹基金里了。国家规定,退钱的时候只退给个人自己扣交的钱,单位为他交的钱全部都为国家做贡献
2014-01-04 16:02:04
670
转载 毕业论文抄袭率过高不着急,修改过关技巧曝光
目前,高校对于硕博士论文,需要通过抄袭检测系统的检测才能算过关。对本科生来说,大部分学校也采取抽查的方式对本科论文进行检测。 抄袭过多,一经查出超过20%,后果严重。轻者延期毕业,重者取消学位。尼玛辛辛苦苦读个大学,学位报销了多不爽。PS:科研机构的检测标准不同,百分之20,百分之三十,百分之四十的都有。但是,软件毕竟是人工设置的一种机制,里面内嵌了检测算法,我们只要摸
2013-12-27 14:49:34
2323
1
转载 BSS段、数据段、代码段、堆与栈
BSS段:BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS是英文Block Started by Symbol的简称。BSS段属于静态内存分配。数据段:数据段(data segment)通常是指用来存放程序中已初始化的全局变量的一块内存区域。数据段属于静态内存分配。代码段:代码段(code segment/text segment)通常是指用
2013-12-18 08:50:42
519
转载 我妈要是知道这些,我早上北大了。
家有5,6,7岁的孩子赶紧保存,对上学很有帮助。注意力训练,有用。1.1. 第一关听课不走神题训练目的:训练学生学习能力,能使学生上课专心听讲,认真写作业,考试不粗心,提高学习成绩训练要求:每天训练10分钟,放学后在家里写作业前训练,由家长监督训练情况,必须每天坚持训练,效果明显。1.1.1. 数字传真训练方法:家长将下列每个数字读一遍,孩子在听完之后凭记忆
2013-12-05 11:12:37
739
原创 关于用JLINK下载程序到博创UP-TECH2410板子上自动重启的问题__zhusjian
问题是这样的大概一个月前,我在IAR6.1上建了一个S3C2410的工程,我这边有两种板子,一块优龙FS2410板子,两块博创UP-TECH2410的板子,对应的也有两种调试器,优龙的使用的是DragonJtag,一端跟电脑的并口相连接,一端连接板子的JTAG接口,优龙的板子是标准的20针JTAG接口,编译环境是ADS1.2,调试的时候还有AXD,你懂的,蛮老了,现在ADS好像是被KEIL收购
2013-09-12 14:43:12
1601
转载 联合体union
当多个数据需要共享内存或者多个数据每次只取其一时,可以利用联合体(union)。在C Programming Language 一书中对于联合体是这么描述的: 1)联合体是一个结构; 2)它的所有成员相对于基地址的偏移量都为0; 3)此结构空间要大到足够容纳最"宽"的成员; 4)其对齐方式要适合其中所有的成员;下面解释这四条描
2013-08-31 16:10:04
459
转载 详解大端模式和小端模式
详解大端模式和小端模式一、大端模式和小端模式的起源 关于大端小端名词的由来,有一个有趣的故事,来自于Jonathan Swift的《格利佛游记》:Lilliput和Blefuscu这两个强国在过去的36个月中一直在苦战。战争的原因:大家都知道,吃鸡蛋的时候,原始的方法是打破鸡蛋较大的一端,可以那时的皇帝的祖父由于小时侯吃鸡蛋,按这种方法把手指弄破了,因此他的父亲,就下令,命令
2013-08-31 16:01:41
535
转载 strlen和sizeof的区别
一、sizeof sizeof(...)是运算符,而不是一个函数。 一个简单的例子:int a;cout 在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。 它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。 由于在编译时计算,因此sizeof不能用来返回动态分配的
2013-08-28 11:07:21
437
转载 Volatile的陷阱
对于volatile关键字,大部分的C语言教材都是一笔带过,并没有做太过深入的分析,所以这里简单整理了一些关于volatile的使用注意事项。实际上从语法上来看volatile和const是一样的,但是如果const用错,几乎不会有什么问题;而volatile用错,后果可能很严重。所以在volatile的使用上,建议大家还是尽量求稳,少用一些没有切实把握的技巧。注意volatile修饰
2013-08-28 09:52:14
906
1
转载 可重入和不可重入
这种情况出现在多任务系统当中,在任务执行期间捕捉到信号并对其进行处理时,进程正在执行的指令序列就被信号处理程序临时中断。如果从信号处理程序返回,则继续执行进程断点处的正常指令序列,从重新恢复到断点重新执行的过程中,函数所依赖的环境没有发生改变,就说这个函数是可重入的,反之就是不可重入的。众所周知,在进程中断期间,系统会保存和恢复进程的上下文,然而恢复的上下文仅限于返回地址,cpu寄存器等之类的
2013-08-27 10:31:14
513
转载 int *p=NULL和*p= NULL有什么区别
很多初学者都无法分清这两者之间的区别。我们先看下面的代码:int *p = NULL;这时候我们可以通过编译器查看p 的值为0×00000000。这句代码的意思是:定义一个指针变量p,其指向的内存里面保存的是int 类型的数据;在定义变量p 的同时把p 的值设置为0×00000000,而不是把*p 的值设置为0×00000000。这个过程叫做初始化,是在编译的时候进行的。明白了什么是初
2013-08-27 09:47:00
2191
转载 const char*和char* const
1、const char*Const char*类型是指向常量的指针,注意此时const所在的位置:在“*”的前面。Const在char的前面或后面都是一样的,但通常将const放置在char的前面,对一个利用const char*类型定义的常量指针来说,不能修改其指向内存中的内容,但可以修改其所指向的内存地址。const char*类型的使用方法如下:char ch[5] = "lisi
2013-08-20 09:51:06
893
转载 strtol()详解
今天,在review 一些代码的时候,看到了strtol()这个函数,由于以前使用它的时候,还没有深刻的了解,这次,我决定探个究竟。网上关于这个函数的资料大都来源于同份资料,linux库函数,讲的不够细致。于是,我花了几个小时,认真地尝试其功能,并整理了这篇文章,希望能对C语言的爱好者一些帮助。希望大家能够将本文中发现的错误及时反馈给我,以便修正。我的信箱是。+------
2013-08-15 17:31:47
583
转载 五险一金,终于懂了!
养老保险: 一般要交满15年,到退休的时候才能终生享受养老金,所以想拿养老金的人请务必在自己退休前15年就开始交。如果到退休年龄交养老保险不满15年,那等到你退休的时候国家会把你个人帐户上存的8%的养老金全部退给你。那单位给你交的21%到哪里去了?国家把单位为你交的21%的钱全部划到国家的养老统筹基金里了。国家规定,退钱的时候只退给个人自己扣交的钱,单位为他交的钱全部都为国家做贡献。退休
2013-07-21 15:23:00
850
转载 warning: function declared implicitly错误原因
line 10: warning: function declared implicitly这是由于没有声明函数原型造成的。在a.c中,void main(){.....delay();....}在b.c中void delay(){}如果就只是这样的话,就会出现上面的worning的。解决办法是在b.h中写 extern void delay
2013-07-18 15:21:38
1866
转载 IAR包含文件的路径定义
1) 在定义包含文件路径的文本框中,定义包含文件的路径有两种很重要的语法, 一是$TOOLKIT_DIR$,这个语法表示包含文件的路径在IAR安装路径的8051 文件夹下,也就是说如果IAR 安装在C 盘中,哪么它就表示C:\ProgramFiles\IAR Systems\Embedded Workbench 4.05 Evaluation version\8051这个
2013-07-18 01:43:08
1536
转载 IAR contains unknow tools 解决方法
在IAR工程下有这么三个文件用于描述工程,后缀名分别为.eww, .ewp, .ewd:.eww --> IAR EWARM工作区文件,描述工作区中包含那些project;.ewd --> C-SPY调试器项目设置文件;.ewp --> IAR EWARM项目文件,有关项目的配置信息全在里面; 所以如果出现以下错误 “The pro
2013-07-17 16:37:34
11380
原创 c/c++中#include <>与#include""区别
而""首先在当前目录下寻找,如果找不到,再到系统目录中寻找。 这个用于include自定义的头文件,让系统优先使用当前目录中定义的。 引用的是编译器的类库路径里面的头文件" "引用的是你程序目录的相对路径中的头文件假如你编译器定义的自带头文件引用在C:\Keil\c51\INC\下面,则#include引用的就是C:\Keil\c51\INC\stdio.h这个头文
2013-07-12 11:11:16
659
转载 Register int i;的含义
在《C陷阱与缺陷》的练习5-2中看到了Register int .Register声明的作用是为了提高效率。 它明确要求CPU把变量始终保存在寄存器里面,直至它消亡。 不过现代编译器都很厉害,根本不需要你多此一举。 所以根本就极少用。 补充: 大多数情况下,你声明了也没有用,因为编译器不会照你说得做,而是在系统优化的时候自己决定
2013-07-10 10:03:31
3033
转载 switch… case 语句的用法
public class Test7 { public static void main(String[] args) { int i=5; switch(i) { case 1: System.out.println("one"); case
2013-06-25 14:38:54
1158
转载 C语言中全局变量、局部变量、静态全局变量、静态局部变量的区别
1.C++变量根据定义的位置的不同的生命周期,具有不同的作用域,作用域可分为6种:全局作用域,局部作用域,语句作用域,类作用域,命名空间作用域和文件作用域。从作用域看:1>全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。当然,其他不包含全局变量定义的源文件需要用extern 关键字再次声明这个全局变量。2>静态局部变量具有局部作用域
2013-06-18 20:32:40
456
转载 指针函数与函数指针的区别
一、在学习arm过程中发现这“指针函数”与“函数指针”容易搞错,所以今天,我自己想一次把它搞清楚,找了一些资料,首先它们之间的定义:1、指针函数是指带指针的函数,即本质是一个函数。函数返回类型是某一类型的指针 类型标识符 *函数名(参数表) int *f(x,y); 首先它是一个函数,只不过这个函数的返回值是一个地址值。函
2013-06-18 20:19:30
430
转载 几个ZigBee协议栈和操作系统
1、freakz协议栈和contiki操作系统。 freakz是一个彻底的开源zigbee协议,而contiki也是一个彻底的开源操作系统,而且这个操作系统短小精悍,非常适合“物联网”时代的MINI型设备,同时,这套系统在全球已经拥有了众多的支持与使用者,已经开发了非常多的应用,甚至有像IPV6这么强大而且的应用,可以在其官方网站上下载到全套的代码!contiki是开源的,可移植的,
2013-05-23 20:14:10
1278
转载 研究生了,你会查文献吗??这里能会有所帮助
研究生了,你会查文献吗??这里能会有所帮助研究生了,大家抱怨最多的就是:“老师只给了一个研究方向和几个关键词,我到哪去找最新的英文文献啊?”或者是:“我对这个方面根本就了解不多,我怎么知道这个方面那里在研究啊?他们在研究什么啊?万一我想的思路别人已近写出东西了,我再做出来不就发不了文章了?”现在我就来介绍一个方法可以很好的解决这个问题!!首先,我们常用的数据库!
2013-04-17 19:07:39
1609
转载 sdram文章精华
SDRAM的工作原理、控制时序、及相关控制器的配置方法一直是嵌入式系统学习、开发过程中的一个难点。掌握SDRAM的知识对硬件设计、编写系统启动代码、提高系统存取效率、电源管理都有一定的意义。本文想通过:1.SDRAM的工作原理。 2.HY57V561620 SDRAM介绍。 3.S3C2410和HY57V561620的接线方法。 4
2013-04-14 10:47:25
693
1
转载 基于ARM的RAM存储器接口设计
SDRAM在系统中主要用作程序的运行空间,数据及堆栈区。当系统启动时,处理器首先从复位地址起始处开始读取启动代码,在完成系统的初始化后,程序代码一般应调入SDRAM中运行,以提高系统的运行速度,同时,系统堆栈、用户堆栈以及运行数据也都放在SDRAM中。1 SDRAM原理分析本节先介绍了SDRAM的基本原理,然后介绍了一个具体SDRAM芯片HY57V641620HG的特性和引脚描述。1
2013-04-01 13:25:33
1086
转载 卸载cygwin完美方法
具体步骤如下:1.删除安装用的临时文件夹(在cygwin里输入命令)(如果你没设可以跳过这步,可以去c盘看看有没有什么文件夹是在安装了cygwin之后产生的,一般那就是了)$ rm -f /cygdrive/c/你的临时文件夹2.停止cron service(没开启此服务的可以跳过,我的默认就没开启)$ cygrunsrv --stop cron$ cygrunsrv --re
2013-03-05 09:38:37
929
转载 C++与Java比较
“作为一名C++程序员,我们早已掌握了面向对象程序设计的基本概念,而且Java的语法无疑是非常熟悉的。事实上,Java本来就是从C++衍生出来的。” 然而,C++和Java之间仍存在一些显著的差异。可以这样说,这些差异代表着技术的极大进步。一旦我们弄清楚了这些差异,就会理解为什么说Java是一种优秀的程序设计语言。本附录将引导大家认识用于区分Java和C++的一些重要特征。 (1) 最
2013-03-04 16:27:51
285
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人