编程不经历错误或警告,怎能见彩虹,没有人能随随便便成为高手。身为程序员的咱们,若是哪一天没有了错误或警告的提示,必定会有一种不祥的预感,对吧,都懂的。编程N年来,碰到过的问题多得本身都记不清了,你也同样,若是能够选择,我愿时光倒流,真但愿都能记下来,如今就能够写本《错误集》了,
。下面是我心情好时,有想法时,随手记下的几个错误或警告,遗憾的是,这些年,就记下那么几个而已,见笑了,但愿能给像我同样在路上的人有些帮助或提示。c++
1.提领指向不彻底类型的指针程序员
struct hostentexpress
{编程
char *h_name; ubuntu
char **h_aliases;centos
int h_addrtype;数组
int h_length;缓存
char **h_addr_list;服务器
#defineh_addr h_addr_list[0]app
};
没有包含头文件,哈哈
好比这个结构,尽管在头文件中已经包含或定义,但对这个结构体的成员(hptr->h_name)变量进行访问时,编译没法经过,显示编译器错误提示为“提领指向不彻底类型的指针”。
对于结构体来讲虽然全部的变量默认都是公有的,可是,若是想访问里面的成员变量,必须有包含对其结构的定义,不然出现如上的错误,c编译器将没法识别结构里面的变量,通常想操做结构体里的成员变量,都是经过调用结构体中定义的函数接口,来取得结构体中的值,若是想直接访问,在头文件或源文件中加入结构体的定义就好了。
2.警告:赋值 makes pointer from integer without a cast
一样由于没包含头文件。
3.previous implicitdeclaration of 'Base64_Code' was here
Base64_Code函数未定义,若是要使用 Base64_Code函数,则要先定义。
4.警告:use of cast expressions aslvalues is deprecated
(short)buf[2] =atoi(&data[4]);不同意把强制类型转换的结果做为左值
5.warning: initializationdiscards qualifiers from pointer target type
initialization取消了指针目标类型的限定。
6.glibc detected *** free():invalid next size (normal)
是内存泄露的问题。
(1)通常是free了没有分配的内存
(2)还有就是分配了内存忘记释放也有可能会出现这样的问题。
(3)最后查出来是数组循环的时候越界了 , 写到了其余的内存里面, 而后一free那个区域就出现了这样的问题。
是有allocate引发的,一个debug的方法是把你怀疑的矩阵(好比释放了就会报内存错误)定义成静态的,这样若是出现越界,会报段错误。依次检查是否你的数组真的越界了。
7. undefined referenceto `__gxx_personality_v0'
gcc main.c animal.o后,出现这个错误(c与c++混合编程中),解决:gcc main.c animal.o -lstdc++ 错误缘由:是由于你用gcc编译.cpp文件.按系统默认.cpp文件是c++的文件格式
8.rmmod:gpio_i2c_LVP1008.ko: Resource temporarily unavailable
[root: 1st]#lsmod //查看一下当前加载的模块
driver 1256 0- Live 0xbf00c000
device 1560 0- Live 0xbf006000
bus 1336 2driver,device, Live 0xbf000000 //模块的引用计数,bus模块被device和driver引用
[root: 1st]# rmmodbus //若是你要卸载bus模块,它会提示出错,要先卸载driver和device
rmmod: remove'bus': Resource temporarily unavailable
[root: 1st]#rmmod driver
usb driverbye!
[root: 1st]#rmmod device //卸载device时,内核自动调用device结构体中指定的release函数
<kernel>release
usb device bye!
[root: 1st]#lsmod //bus的引用计数为0,能够卸载bus了
bus 1336 0 -Live 0xbf012000
[root: 1st]#rmmod bus
usb bus bye!
9. error: expectedidentifier before numeric constant错误。
缘由:定义的enum结构体与其它处的宏定义有冲突。
10.warning: missing bracesaround initializer
缘由:结构体初始化失败。
11.too many agrument
一种缘由:参数多于10个。
12. /usr/bin/ld: cannot find-lxxx
缘由:找不到对应库文件。其中,-lxxx表示连接库文件 libxxx.so。
通常出现这种错误有如下几种缘由:
1.系统缺少对应的库文件;
2.版本不对应;
3.库文件的连接错误;
4.库文件路径设置问题。
对应第一第二种状况,能够经过下载安装lib来解决,ubuntu大多数能够直接经过apt-get来安装:
apt-get install libxxx-dev
通常遇到这种问题笔者第一时间也是会去检查系统是否已安装该lib或者是否已选择正确版本(只是习惯问题),若是仍是不能解决问题,那么,引发错误的缘由不是连接错误就是库文件路径问题了。
经过find或者locate指令定位到连接文件,查看连接文件是否正确的指向了咱们但愿的lib,若是不是,用ln -sf */libxxx.so.x */libxxx.so 指令修改它。
若是是库文件路径引起的问题,能够到/etc/ld.so.conf.d目录下,修改其中任意一份conf文件,(能够自建conf,以方便识别)将lib所在目录写进去,而后在终端输入ldconfig 更新缓存。
13.在控制台提示:Semop lock failureIdentifier removed
Semop unlock failure Identifier removed
解决办法:运行应用程序,好比:client-qws& 去掉-qws 由于只有Server 才须要 -qws&。&为后台运行的标识。
14.Segmentation fault
数组越界或访问空、野指针或未被初始化的指针都会出现这个问题。
15.安装VMware: The MSI'C:\Users\dell\AppData\Local\Temp\vmware_1344246656\vmwarevmcisockets64.msi'failed
清空注册表中vmware信息(或者下载一个VM卸载工具):
一、开始->运行,输入:regedit;
二、在注册表中,找到:HKEY_LOCAL_MACHINE\SOFTWARE\VMware并删除。
VMware Workstation unrecoverable error:(vmx)错误
解决:删除或修改虚拟机目录下拓展名为.vmss(33.3M)文件,再次启动便可。 通常为centos5.6-d4cf3290.vmss文件。
16.arm板运行时出现Can't retrieve login name
缘由:RTP的JRTPLIB库中的RTPSession中的Create->InternalCreate->CreateCNAME中,有对用户名进行必定操做,其中的getlogin_r(),getlogin()和getenv()操做都会由于用户名为空,而返回错误 ERR_RTP_SESSION_CANTGETLOGINNAME。
解决的方式有3种:1)export LOGNAME=root 2)大部分开发板仍是须要用户名登录的,即在文件系统彻底启动后再运行,也能解决。 3)由于板子上的文件系统有时不须要用户名就能够直接登陆,而在咱们能够经过修改JRTPLIB库的CreateCNAME源代码来为系统默认设置一个用户名。在RTPSession.cpp的第1400行。
17. warning: control reaches end of non-void function
解决:函数结尾无return返回值致使的,在函数最后加一句return 0。
18.could not read symbols: 文件格式错误
19.insmod: can't insert 'xxx.ko': unknown symbol in module, or unknown parameter
解决办法:经过信息中的绿色背景信息,能够找到解决办法:在内核模块源码文件中添加MODULE_LICENSE("GPL");
20.MMB LEAK(pid=2876): 0xC68B9000, 32768 bytes, '' mmz_userdev_release: mmb<0xC68B9000> mapped to userspace 0x40f50000 will be force unmaped!
解决:客服端跟服务器端进行socket通讯时,服务器异常断开,而客户端并不知道服务器已经断开,继续向服务器发送数据,从而引起了SIGPIPE信号,内核响应这个信号,强行终止了程序;
#include <signal.h> signal(SIGPIPE, SIG_IGN);
还有一种可能就是代码中循环判断嵌套层次达到四次,被GCC编译器优化后运行时会出现这种错误。只要下降循环判断嵌套层次便可。
21.mount: 192.168.1.211:/work/nfs failed, reason given by server: Permission denied
1)修改 /etc/exports
/work/nfs 192.168.1*(rw,insecure,sync) //网段不对
2)而后重启服务
service nfs restart
22. 开发板能ping通路由器,但ping不通外网
vi /etc/resolv.conf
nameservice 192.168.2.1
由于1,2网段不断切换,但域名服务器未改变。
我想,错误不在于多寡以及本身笔记记下了多少,而是在于能养成一种良好的习惯,编程以逻辑为重,好比最为简单的if(0 == i),错误的锁定及调试手段#define _DEBUG(msg...) printf("[ %s,%s, %d ] ",__FILE__, __FUNCTION__, __LINE__); printf(msg);printf("\r\n")等等等等…………
注:本文通过整理,转载自http://blog.csdn.net/sbvfhp/article/details/9239531