C++ bug tips
2017-09-11 11:11
176 查看
系统: 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位有关。
所以一个数组的实际长度应该是:
编辑器: 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++ tips: 类成员函数的参数默认值
- 使用C++的map容器遇到的bug(map/set iterator not dereferencable)
- C++一个很容易的bug
- C++ Tips: 在控制台中显示中文
- C#调用C++DLL出现的堆被损坏,说明加载的任何DLL中有Bug
- 四则运算出题器(C++)-BUG修复
- 关于C++中的rand()的很蠢的bug
- 【C++】bug之vector subscript out of range
- 《Inside the C++ Object Model》关于基类与派生类的Tips
- [收藏]C++ Tips(5)--返回值的检查
- [收藏]C++ Tips(13)--Debug版和Release版的程序
- [收藏]C++ Tips(10)--宏的使用
- 菜鸟写c++的小bug【1】加载头文件出错
- MFC Feature Pack for Visual C++ 2008的BUG之一
- Microsoft Visual C++ Tips and Tricks
- Visual C++ Tips and Tricks
- OO的bug,C++的bug,还是编译器的bug?
- 【C++】指针引发的bug
- 记录C++学习bug历程
- c++指针 tips