常见的编程错误

编程不经历错误或警告,怎能见彩虹,没有人能随随便便成为高手。身为程序员的我们,如果哪一天没有了错误或警告的提示,一定会有一种不祥的预感,对吧,都懂的。编程N年来,碰到过的问题多得自己都记不清了,你也一样,如果可以选择,我愿时光倒流,真希望都能记下来,现在就可以写本《错误集》了,。下面是我心情好时,有想法时,随手记下的几个错误或警告,遗憾的是,这些年,就记下那么几个而已,见笑了,希望能给像我一样在路上的人有些帮助或提示。

1.提领指向不完全类型的指针

struct hostent

{

       char    *h_name;              

       char    **h_aliases;

       int     h_addrtype;

       int     h_length;

       char    **h_addr_list;

       #defineh_addr h_addr_list[0]

};

没有包含头文件,哈哈

    比如这个结构,尽管在头文件中已经包含或定义,但对这个结构体的成员(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卸载工具):

       1、开始->运行,输入:regedit;

       2、在注册表中,找到: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

时间: 2024-10-17 00:05:37

常见的编程错误的相关文章

python常见的编程错误

常见的编程错误2.1 试图访问一个未赋值的变量,会产生运行时错误. 常见的编程错误2.2 ==,!=, >=和<=这几个运算符的两个符号之间出现空格,会造成语法错误. 常见的编程错误2.3 !=,<>,  >=和<=这几个运算符中,假如两个字符的顺序弄反了(分别写成=!,><, =>,=<),会造成语法错误. 常见的编程错误2.4 切不可将相等运算符"=="同赋值运算符"="弄混了.其实按正统逻辑,在读的时

【转】《深入理解计算机系统》C程序中常见的内存操作有关的典型编程错误

原文地址:http://blog.csdn.net/slvher/article/details/9150597 对C/C++程序员来说,内存管理是个不小的挑战,绝对值得慎之又慎,否则让由上万行代码构成的模块跑起来后才出现内存崩溃,是很让人痛苦的.因为崩溃的位置在时间和空间上,通常是在距真正的错误源一段距离之后才表现出来.前几天线上模块因堆内存写越界1个字节引起各种诡异崩溃,定位问题过程中的折腾仍历历在目,今天读到<深入理解计算机系统>第9章-虚拟存储器,发现书中总结了C程序中常见的内存操作有

android开发常见编程错误总结

1.设置TextView的文本颜色 1 2 3 TextView tv; ... tv.setTextColor(R.color.white); 其实这样设置的颜色是 R.color.white的资源ID值所代表的颜色值,而不是资源color下的white颜色值:正确的做法如下: 1 tv.setTextColor(getResources().getColor(R.color.white)); 这个出错的概率满高的,就是因为二者都是int类,导致编译器不报错. 2.读取Cursor中的值 1

最常见的HTTP错误

1. HTTP 500错误(内部服务器错误)对对HTTP 500错误的定义已经充分证明了这是一个最常见的HTTP错误. 一般来说,HTTP 500 错误就是web服务器发生内部错误时返回的信息. 例如,web服务器过载时将无法正确处理访问请求.根据Google的搜索数据统计,HTTP 500 错误发生机率是404错误的两倍: 2. HTTP 404错误(文件未找到)大多数人都知道这个错误. 当用户试图访问Web服务器(通常是一个网页)上某个实际不存在的资源时,就会发生404错误. 404错误可能

从一篇Blog看两个并发编程错误

发现公司支付宝接入的代码有点神奇,在网上搜索了下,找到原始版本.估计有不少人都是抄那份代码的. 原文在:http://blog.csdn.net/simdanfeg/article/details/9011603    Android支付接入(一):支付宝 但是代码里有两个明显的并发问题,尽管在Android下可能不会有问题. 下面摘抄一段: public class MobileSecurePayer { <strong>Integer lock = 0; </strong> /

C语言中常见的内存错误与解决方法

常见的错误 关于内存的一些知识已在内存分配中提及,现记录与分享常见的内存错误与对策. 类型 1:内存未分配成功,却使用了它. 方   法:在使用之前检查指针是否为NULL. 1)当指针p是函数的参数时,在函数入口处用语句assert(p!=NULL)进行断言检查. 2)当使用malloc或new来申请内存时,应该用if(p != NULL)进行防错检查. 类型 2:引用了尚未初始化的指针 原   因:内存的缺省初始值究竟是什么并没有统一的标准,在使用之前都进行初始化. 1)没有初始化的观念. 2

ssh整合常见的后台错误

ssh整合以及常见的后台错误 摘自网络 jsp和Servlet之间传值出现乱码的解决方案 采用设置字符集的方式 request.setCharacterEncoding("utf-8"); 在web.xml文件里定义编码,同时在CoreFilter类里定义编码为utf-8 <filter> <filter-name>encodingFilter</filter-name> <filter-class>fengke.filter.CoreF

常见http代码错误原因及处理

常见的HTTP错误可以分为以下四大类.每一大类又细分为很多类小错误.当您打不开网站或者打开网站报错时首先检查您输入的网站是否有误,检查网络是否有问题或者虚拟主机的DNS是否可以解析.确定没有问题时再看下面http常见错误分析: 1.400错误 问题原因:您所要打开的网页不存在或你填写的身份验证信息不正确. 解决方法:重新尝试依然错误后提交工单. 2.401错误 最常见的出错提示:401 UNAUTHORIZED 问题原因:您试图访问受限页面但未经授权时,网站返回HTTP 401错误.错误登录尝试

常见动态内存错误---内存泄漏

常见动态内存错误 编译器不能自动发现动态内存错误,动态内存错误通常只能在程序运行时才能被捕捉到,而且错误原因不容易查找,错误本身也不容易捕捉,改错难度较大. 1.动态内存分配失败却继续操作 内存不足等有可能导致动态内存分配失败,所以使用new请求分配动态内存后一定要检查返回地址是否为NULL. 如用if(p==NULL) 或 if(p!=NULL)进行检查,未检查前不要操作动态内存空间. 2.动态内存空间未初始化就进行读操作 C++标准并未规定动态内存空间的默认值,程序无法预知该默认值的具体指.