C++ bug tips

来源:互联网 发布:冷核聚变知乎 编辑:程序博客网 时间:2024/06/07 17:45

系统: Linux 16.04 LTS
编辑器: vim
编译器:g++

  1. Segmenta Fault(段错误)
    概念是“当程序试图访问不被允许访问的内存区域(比如,尝试写一块属于操作系统的内存),或以错误的类型访问内存区域(比如,尝试写一块只读内存)。”
    一般段错误的原因有3个:

    • 数组或者内存越界啦,一定要注意边界啊。
    • 访问类型错误,数据类型不一致。比如非要访问一块只读内存,或者输出的时候类型错误。
    • 访问了不存在的内存,就是空指针啊。
  2. 标准输入流cin内容的判断
    当你读入的键盘输入的数据类型和要赋值的变量数据类型不一致时,输入不成功,这时可能需要用到这几个函数:

    • cin.fail():输入流错误,流坏掉了,期望读入int却读入了string。
    • cin.eof():读到了结束符,输入结束。
    • cin.get():读取单个字符,只能提取流里面的第一个字符,同时它也有删除这个流里的字符的作用。
    • cin.rdstate():如果输入的类型与变量类型无法匹配,那就会发生错误,cin里有个方法能检测这个错误,就是rdstate()。

      ios::iostate state = cin.rdstate();

      状态类型即标识符为:

      goodbit:无错误。
      Eofbit:已到达文件尾。
      failbit:非致命的输入/输出错误,可挽回。
      badbit:致命的输入/输出错误,无法挽回。

    • cin.clear() 用来搞清楚到底是出现了什么错误,即确定上一条的内部标识符

    • cin.sync() 确定标识符后,就可以用此函数来清空数据流。

    所以当读入一个值但是错误的时候,可以这样来重新读入:

    int a;
    while(!(cin>>a)){
    cin.clear();
    cin.sync();
    }
    //当同时读入多个数据时,可以这样重新读入:
    int a,b;
    while(!(cin>>a>>b)){
    cin.clear();
    while(cin.get()!=’\n’) continue;
    }

  3. sizeof()的坑
    用sizeof(array)来求一个数组的长度时,它返回的是类型的对象表示的字节数,即返回一个对象或类型所占的内存字节数,所以他与机器时32位还是64位有关。
    所以一个数组的实际长度应该是:

     sizeof(array)/sizeof(array[0])
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 孩子学习太笨怎么办 老师是个小人怎么办 孩子写字太差怎么办 孩子写字下手重怎么办 孩子一年级数学不好怎么办 孩子数学理解能力差怎么办 智商情商都低怎么办 一年级孩子数学很差怎么办 一年级孩子数学差怎么办 一年级数学学不好怎么办 孩子成绩差该怎么办 小学生数学太差怎么办 小学数学基础差怎么办 孩子一年级学习不好怎么办 快两岁的宝宝老尿裤怎么办 戒母乳宝宝哭闹怎么办 三周岁不肯说话怎么办 两岁宝宝打人怎么办 刚开始跳绳腿疼怎么办 两周岁宝宝拉肚子怎么办 宝宝睡觉认人怎么办 宝宝脸不光滑怎么办 两周岁宝宝打人怎么办 分手后想念前任怎么办 孩子不学习该怎么办 小孩吃了牙膏怎么办 小孩子吃了牙膏怎么办 一岁宝宝龋齿怎么办 宝宝吃牙膏了怎么办 刷牙吞了牙膏怎么办 宝宝刷牙吞牙膏怎么办 宝宝语言发育迟缓怎么办 两岁宝宝叛逆怎么办 宝宝不愿意学说话怎么办 一岁多宝宝嘴臭怎么办 三岁多了不说话怎么办 宝宝说话夹舌头怎么办 两岁不会说话怎么办 三周岁不会说话怎么办 两岁半宝宝说话结巴怎么办 孩子咬字不清怎么办