您的位置:首页 > 编程语言 > C语言/C++

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位有关。

所以一个数组的实际长度应该是:

sizeof(array)/sizeof(array[0])
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: