
C语言基础
egbert果
学习,分享,成长
展开
-
c语言内存管理、野指针、malloc
C语言一共定义四个区块:代码区、全局变量和静态变量区、栈、堆针对四个区块,用户的内存分配也有三种不同的方式:静态变量区:在代码编译的时候就分配好了,比如全局变量,被static定义的变量堆:这需要程序员自己分配和释放,分别使用malloc和free函数栈:在程序运行的时候,系统会自动的给程序分配内存,在程序结束的时候,就自动的释放堆和栈的区别:原创 2017-03-19 09:40:54 · 2002 阅读 · 0 评论 -
malloc(0)返回什么
首先用两段代码说明一下现象,后面再解释现象的原因:malloc的正确用法:char *p = NULL;p = (char*)malloc(100);if(p == NULL){ return;}....free(p);p = NULL; //使用完之后,防止p变为野指针malloc(0)会返回什么:#includeusing原创 2017-03-19 09:56:55 · 2494 阅读 · 1 评论 -
c语言字符串 数字转换函数大全
转载:c语言字符串 数字转换函数大全字符串数字转换到底什么意思呢:字符串和数字的编码不一样,字符串是按照国际标准ASCII码表进行编码,每个数字都是一个8位的ASCII码(也就是一个字节大小);而数字是按照其大小直接编码成二进制,不论这个数字有多长,均直接码成二进制位。如126如果按字符串进行编码,需要3个字节,而按数字编码,只需要一个字节长度(一个字节可以表示数字从0到255转载 2017-03-19 10:21:07 · 443 阅读 · 0 评论 -
二级指针传参的解释和函数指针的理解
根据《C语言深度解析》二级指针void GetMemory(char** p,intnum){ *p = (char*)malloc(num*sizeof(char)); returnp;}int main(){ char*str= NULL; GetMemory(&str,10); strcpy(s原创 2017-03-19 10:25:07 · 1090 阅读 · 1 评论 -
C语言编译步骤
C语言从代码变成可执行程序的步骤:预处理 -----> 编译 -----> 汇编 -----> 链接⒈预处理:去掉注释,加载头文件,代替宏定义,条件编译需要文件:.c文件生成产物:预处理文件(以.i结尾)使用方法:gcc hello.c -E -o hello.i可以使用vim打开预处理文件来查看生成产物⒉编译:使用编译器进行C语言的语法检查原创 2017-03-25 11:15:49 · 554 阅读 · 0 评论 -
二级指针及段错误
首先段错误产生的原因有两个:1、访问的内存地址超出了系统给这个变量分配的内存空间(越界)2、系统访问了程序的静态数据区段错误产生的过程是:1、用户程序要访问的一个虚拟地址(VA),经过MMU检查后发现是无权访问的2、MMU产生一个异常,CPU从用户态切换到特权模式,产生遗产关中断,并跳转到内核代码中执行异常服务程序。3、内核吧这个异常解释Wie段错误,并把引发段错误原创 2017-03-25 11:43:02 · 762 阅读 · 0 评论 -
内存对齐(结构体)
在定义结构体变量的时候,我们通过sizeof求取结构体的大小的时候,发现和我们自己计算的不同,例如下:sizetest1所占内存大小为8,而sizetest2所占内存大小为12,和我们理解的7都不相同,其原因就是编译器将三种类型的数据的存储方式进行了优化,使其内存字节对齐了。为什么进行内存对齐:摘抄http://blog.chinaunix.net/uid-23原创 2017-03-25 11:55:48 · 245 阅读 · 0 评论 -
C程序(进程)的内存布局
这篇文章是转载博友的,链接如下http://www.cnblogs.com/dejavu/archive/2012/08/13/2627498.html在编写程序的过程中,内存是一个非常重要的概念,它涉及到系统的稳定,如果分配的好,可以避免很多bug。我有一个同事,维护的一个项目,那个机器每两小时就会莫名其妙的停止运行,后来经过仔细查看代码,发现有一块程序在不断的malloc,但从转载 2017-03-26 10:34:24 · 254 阅读 · 0 评论