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

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

一、什么是未定义行为?

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

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

二、未定义行为的例子

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

1. 指针的未定义行为:

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

2. 其他未定义行为

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

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


相关文章
|
1月前
|
算法 安全 大数据
【C/C++ 随机函数行为】深入探索C++中的随机数:std::random_device与rand的行为分析(二)
【C/C++ 随机函数行为】深入探索C++中的随机数:std::random_device与rand的行为分析
51 0
|
1月前
|
算法 安全 数据安全/隐私保护
【C/C++ 随机函数行为】深入探索C++中的随机数:std::random_device与rand的行为分析(一)
【C/C++ 随机函数行为】深入探索C++中的随机数:std::random_device与rand的行为分析
48 0
|
1月前
|
存储 算法 编译器
【C++ 模板应用】模板哪些行为属于多态哪些行为属于泛型编程?
【C++ 模板应用】模板哪些行为属于多态哪些行为属于泛型编程?
26 0
|
4月前
|
C++
c++ - 警告 : treating ‘c-header‘ input as ‘c++-header‘ when in C++ mode, 此行为已弃用
c++ - 警告 : treating ‘c-header‘ input as ‘c++-header‘ when in C++ mode, 此行为已弃用
|
10月前
|
C语言 C++
C++ 链接库顺序导致的符号未定义问题
C++ 链接库顺序导致的符号未定义问题
84 0
|
11月前
|
编译器 开发工具 C语言
C++ Visual Studio 2022 中的改进、行为更改和错误修复
C++ Visual Studio 2022 中的改进、行为更改和错误修复
|
存储 Java 编译器
C 和 C++ 中的未定义行为
考虑以下 C/C++ 程序并尝试猜测输出?
67 0
|
Java C++
C++ 和 Java 中的默认虚拟行为有何不同及其异常处理的比较
在 C++ 中,类成员方法默认是非虚拟的。可以使用virtual关键字将它们设为虚拟。例如,Base::show() 在以下程序中是非虚拟的,并且程序打印 “Base::show() called”
67 0
|
C++
C/C++混编“未定义的引用”的解决一例
C/C++混编“未定义的引用”的解决一例
166 0
|
6天前
|
存储 编译器 C语言
c++的学习之路:5、类和对象(1)
c++的学习之路:5、类和对象(1)
22 0