为什么if语句中未定义的参数不会导致segfault或其他错误
Why do undefined parameters in an if statement not cause a segfault or another error?
例如:
array[2]={1,2};
myInt=5;
if (array[myInt-6]==2)
cout << true << endl;
else
cout << false << endl;
if语句中数组中引用的值显然超出了界限。当我编译并运行这个时,我会得到false输出,这是有道理的,因为条件不是true,但我想知道为什么没有错误输出。
因为未定义的行为是未定义的。任何事情都有可能发生,包括看起来有效。
编译器和运行时都不需要诊断。你必须自己处理绑定检查。
C++不是一种内存安全的语言,因此您的工作是避免此类问题,而不是编译器或运行时的问题。
下一个问题。
调用array[-1]
不是错误,它几乎只是*(array - 1)
的简写,即数组前一个int地址处的值。假设操作系统已经将这个地址分配给了你的程序,你只会得到一些随机的数据,转换成一个int
因为存储在那个位置的数据每次都可能是相同的,所以你会得到相同的行为——这没有多大意义。如果你想强迫这样的事情导致错误,那么使用标准模板库的容器可能是最简单的,例如向量
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- 我的字符计数代码计算错误.为什么
- 使用clang编译时regex-segfault,可能存在编译器错误
- 是否可以在异常(SEGFAULT)错误后自动重新启动程序
- 获取用户存储segfault错误
- 为什么if语句中未定义的参数不会导致segfault或其他错误
- OpenMPI MPI_Gather segfault或断言错误
- 自定义字典类C++中的Segfault错误
- 捕获 Segfault 或任何其他错误/异常/信号C++例如在 Java 中捕获异常
- 分段错误 - SEGFAULT - 在纯虚拟C++上.为什么