C/C++未定义行为的例子汇总

一、什么是未定义行为?

        未定义行为(Undefined Behavior)是指C语言标准未做规定的行为。同时,标准也从没要求编译器判断未定义行为,所以这些行为有编译器自行处理,在不同的编译器可能会产生不同的结果,又或者如果程序调用未定义的行为,可能会成功编译,甚至一开始运行时没有错误,只会在另一个系统上,甚至是在另一个日期运行失败。当一个未定义行为的实例发生时,正如语言标准所说,“什么事情都可能发生”,也许什么都没有发生。

        一句话,未定义行为就是运行结果不确定,可能运行成功,可能失败,可能结果不同

二、未定义行为的例子

大家只要正确的写代码就行,别搞这些未定义的行为。

1. 指针的未定义行为:

解引用空指针
解引用没被初始化的指针(野指针)
使用指向生命周期已结束的对象的指针
指针的越界访问

2. 其他未定义行为

有符号的整数的算数溢出
数组越界访问
访问未初始化的变量
对字符串常量进行修改
对于有返回值的函数,不返回返回值
变量同时是左值和右操作数
输出语句中的无顺序打印(这里特指此类printf( "%d %d" ,++i , --i );
C++中的new / delete,new [ ] / delete [ ],malloc / free 没有配对使用 

参考博客:洛谷日报:关于 C++ 未定义行为的一些事 - 知乎

你可能感兴趣的:(C语言学习,C++学习,c++,开发语言)