C++ bug tips
来源:互联网 发布:冷核聚变知乎 编辑:程序博客网 时间:2024/06/07 17:45
系统: Linux 16.04 LTS
编辑器: vim
编译器:g++
Segmenta Fault(段错误)
概念是“当程序试图访问不被允许访问的内存区域(比如,尝试写一块属于操作系统的内存),或以错误的类型访问内存区域(比如,尝试写一块只读内存)。”
一般段错误的原因有3个:- 数组或者内存越界啦,一定要注意边界啊。
- 访问类型错误,数据类型不一致。比如非要访问一块只读内存,或者输出的时候类型错误。
- 访问了不存在的内存,就是空指针啊。
标准输入流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;
}sizeof()的坑
用sizeof(array)来求一个数组的长度时,它返回的是类型的对象表示的字节数,即返回一个对象或类型所占的内存字节数,所以他与机器时32位还是64位有关。
所以一个数组的实际长度应该是:sizeof(array)/sizeof(array[0])
- C++ bug tips
- C tips
- c++,tips
- C tips
- C tips
- C Tips
- C++代码优化Tips
- tips about C
- C++代码优化Tips
- C/C++ TIPS
- C Programming Tips
- C/C++ Tips (2)
- c tips 待续、、、
- C学习第一章tips
- C Tips: stdbool.h
- C Tips: __attribute__((packed))
- XenAPI (C#) Tips
- C语言tips
- 零售快消品B2B“货圈全”产品分析报告
- react-native imageButton 可设置默认图片,避免加载失败空白
- Java]NIO:使用Channel、Charset(字符集)、使用Charset传递CharBuffer
- Excel设置扩展数据区域实现输入新行自动扩展上行公式
- Collections
- C++ bug tips
- HDU沈阳网络赛:transaction transaction transaction(树形dp & 最短路)
- 第二周项目1-多文件程序的组织(课程主页版)
- Ubuntu16.04安装inetsim模拟Internet
- Redis与Memcached区别
- mysql having的用法
- 有史以来在表格下方新增空行最快捷的方法(没有之一)
- Appach_Tomcat整合架设
- C++读写HDFS代码