摘要: 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 阅读(831) 评论(0) 推荐(0) 编辑
摘要: 使用linux gdb时,总会有内存泄露的问题,在此,推荐一个工具,valgrind,可以检测出指针悬空的问题,以及指针未释放的情形valgrind -v --leak-check=full 原程序执行命令,即可测试或者,简单的用,valgrind 原程序执行命令,也可以 阅读全文
posted @ 2012-09-14 09:55 dreamboke 阅读(122) 评论(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 阅读(2533) 评论(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 阅读(202) 评论(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 阅读(97) 评论(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 阅读(133) 评论(0) 推荐(0) 编辑
摘要: 1.什么是段错误 就是内存泄漏,访问了非法内存。要么指针为空,越界了,或者是本身地址非法,如0X00非法。“所谓的段错误就是指访问的内存超出了系统所给这个程序的内存空间,通常这个值是由gdtr来保存的,他是一个48位的寄存器,其中的32位是保存由它指向的 gdt表,后13位保存相应于gdt的下标,最后3位包括了程序是否在内存中以及程序的在cpu中的运行级别,指向的gdt是由以64位为一个单位的表,在这张表中就保存着程序运行的代码段以及数据段的起始地址以及与此相应的段限和页面交换还有程序运行级别还有内存粒度等等的信息。一旦一个程序发生了越界访问,cpu就会产生相应的异常保护,于是segment. 阅读全文
posted @ 2012-08-30 20:03 dreamboke 阅读(464) 评论(0) 推荐(0) 编辑
摘要: (chapter one)"five minutes,another five minutes, "(laugh)"tolerance for a more five minutes then there comes success!"thought by Ye, with a smile on her face.she finds that counting the remaining time is a good and high efficient way to comfort herself.It seems that time fly.the 阅读全文
posted @ 2012-08-29 19:21 dreamboke 阅读(151) 评论(0) 推荐(0) 编辑
摘要: 今天我问我是挺小心眼的,好朋友买的西瓜,想要分给两个人,其中一个是我讨厌的,另外一个是她讨厌的,然后我不想给那个我讨厌的人,然后盆友开解我说,不要小心眼,一来,不是我的瓜,我不能做主,二来,是她买的瓜,她都能给她讨厌的人吃,我为什么不能把她买的瓜给我讨厌的人吃呢。其实,我错了,只是觉得难为情,以后不会这么干了,脸都红了········· 阅读全文
posted @ 2012-08-28 13:33 dreamboke 阅读(106) 评论(0) 推荐(0) 编辑
摘要: 从6月末,我的thinkpad r61型号的笔记本就开始报错误,各种数据写入错误,系统启动运行后报错,连续报错,后来是无法启动,蓝屏,0x000009c等等。原因是,硬盘磁道坏了。硬盘错误是因为我总是在电脑带电时,带着它移动,可能有些震荡或者颠簸使得带点硬盘损坏,类似热插拔。重装系统。ps,电脑是2008年10月买的,刚好四年了快。安装XP1.没有光盘,所以我下载了一个老毛桃winPE U盘制作工具,再把U盘载入,即可将winPe烧入U盘。之后,将U盘插入电脑,开机启动,enter,选择U盘启动。这里,我看网上有人说要进BIOS里面将启动选项的第一选择启动目标设为U盘disk,装完PE重启安装 阅读全文
posted @ 2012-08-15 20:33 dreamboke 阅读(292) 评论(0) 推荐(0) 编辑