随笔分类 -  Linux C

摘要:C语言编程的一些参数传递问题1.指针参数例子,交换传入两个数(1)void swap(int *a,int *b)// right调用方式,swap(&c,&d);(2)void swap(int a,int b)//wrong调用方式,swap(c,d)总结:(1)是对的。&c和a指向的内容是相同的,均为c(或者*a),但是&c和a的地址不一样。即,内存为存储c开辟了一个空间S1,而&c和a则是两个指针,内存用另外两个空间(不同)存储二者,这二者均指向S1,即内容c(或者*a)2.指针的指针就是说传入的指向指针的指针,作用类似于指针的引用3.指针的引用 阅读全文
posted @ 2012-09-15 21:29 dreamboke 阅读(838) 评论(0) 推荐(0)
摘要:使用linux gdb时,总会有内存泄露的问题,在此,推荐一个工具,valgrind,可以检测出指针悬空的问题,以及指针未释放的情形valgrind -v --leak-check=full 原程序执行命令,即可测试或者,简单的用,valgrind 原程序执行命令,也可以 阅读全文
posted @ 2012-09-14 09:55 dreamboke 阅读(125) 评论(0) 推荐(0)
摘要:在linuxC中,编程遇到该问题。1,有可能是漏写;}或者将)写成},或者是中英文混写,如将英文的)写成中文的)。2.机器码本身的问题,需要对数据类型进行typedef,如,使用int类型或者 char类型,分别进行定义,typedef in DTYPE,typedef char PCHAR,这一点没试验过,是看别人的3.没有加上需要的头文件。这一点我碰到了,很神奇。4.C和C++混编,如在C中使用class inline等,需要加上extern告诉编译器。因为C和C++的编译时找不同的内部代码,如果不告诉他,他会找一种,比如说全部找C的内部解释,那么C++部分的就会出错 阅读全文
posted @ 2012-09-14 09:51 dreamboke 阅读(2635) 评论(0) 推荐(2)
摘要:函数传入的参数为指针类型,函数内部也另外开辟了空间,使得它的头指针等于传入的,但是free时,段错误。这是不对的。如错误如下:fr412012.0910short* pinx=(short*) malloc(pinNum*sizeof(short));short* piny=(short*) malloc(pinNum*sizeof(short));int i,j,k;pinx=nets[jj]->pinX;piny=nets[jj]->pinY;free(pinx);free(piny);正确如下(1)xs = (DTYPE *)malloc(sizeof(DTYPE)*(d)) 阅读全文
posted @ 2012-09-09 21:42 dreamboke 阅读(212) 评论(0) 推荐(0)
摘要:对于math。h的函数使用,需要在链接时即生成目标文件时, 加上-lm,注意,不是编译阶段想要调试,编译时,加上-g选项gdb时,出现 value optimazed out,说明,程序编译器优化了,分辨不出不同位置的同一个变量名,需要gcc时加上-O0,不能用其他的(即还有的O2,O3,O4),另外也可以加上-Wall。display和print是显示取消为undisplay查看用info,如info b,info display 阅读全文
posted @ 2012-09-09 21:36 dreamboke 阅读(105) 评论(0) 推荐(0)
摘要:http://blog.chinaunix.net/uid-26868581-id-3328648.html堆和栈的区别1. 管理方式不同栈,由编译器自动管理,无需程序员手工控制;堆:产生和释放由程序员控制。2. 空间大小不同栈的空间有限;堆内存可以达到4G,。3. 能否产生碎片不同栈不会产生碎片,因为栈是种先进后出的队列。堆则容易产生碎片,多次的new/delete会造成内存的不连续,从而造成大量的碎片。4. 生长方向不同堆的生长方式是向上的,栈是向下的。5. 分配方式不同堆是动态分配的。栈可以是静态分配和动态分配两种,但是栈的动态分配由编译器释放。6. 分配效率不同栈是机器系统提供的数据结 阅读全文
posted @ 2012-08-30 20:19 dreamboke 阅读(142) 评论(0) 推荐(0)
摘要:1.什么是段错误 就是内存泄漏,访问了非法内存。要么指针为空,越界了,或者是本身地址非法,如0X00非法。“所谓的段错误就是指访问的内存超出了系统所给这个程序的内存空间,通常这个值是由gdtr来保存的,他是一个48位的寄存器,其中的32位是保存由它指向的 gdt表,后13位保存相应于gdt的下标,最后3位包括了程序是否在内存中以及程序的在cpu中的运行级别,指向的gdt是由以64位为一个单位的表,在这张表中就保存着程序运行的代码段以及数据段的起始地址以及与此相应的段限和页面交换还有程序运行级别还有内存粒度等等的信息。一旦一个程序发生了越界访问,cpu就会产生相应的异常保护,于是segment. 阅读全文
posted @ 2012-08-30 20:03 dreamboke 阅读(482) 评论(0) 推荐(0)