c++的未定义行为
C++ undefined behavior
unsigned char * numbers = {1,1,1};
unsigned short * ptr = (unsigned short*) numbers;
*(++ptr)=2;
printf("%d %d %d %d", numbers[0], numbers[1], numbers[2], numbers[3]);
以上可能导致未定义的行为,对吗?另外,屏幕上将打印什么?
结果是1 1 2 0
,但1 1 0 2
是否可以打印?
将导致未定义的行为。首先,因为你让一个char指针指向一个整数数组:注意unsigned char * numbers = {1,1,1};
和unsigned char numbers[] = {1,1,1}; unsigned char* ptr = numbers;
之间的区别。
还因为程序打破了严格的混叠规则。任何事情都可能发生:程序可能输出某种结果,或者垃圾,或者崩溃。
此外,强制转换为unsigned short假设有特定的CPU端序。因此,如果你的程序碰巧去了未定义的行为"打印某种结果",该结果将取决于CPU端序。
以上可能导致未定义的行为,对吗?
(1)不仅行为可以是未定义的,而且它将始终是未定义的。
还有,屏幕上会打印什么?
根据(1)
未定义是否在某些计算机上打印"1 1 0 2"
。也可能不会。因为任何结果都是可能的。参见(1).
我们不知道最后一个字符是什么,但是前3个字符将被打印出来。
它们可能不能打印。参见(1).
这段特殊的代码:
unsigned char * numbers = {1,1,1};
不编译
相关文章:
- 编译C++时未定义的引用
- vscode g++链路故障:体系结构x86_64的未定义符号
- 如何修复此错误:未定义对"距离(浮点数,浮点数,浮点数,浮点数,浮点数)"的引用
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 不知道某个东西是否被忽略会引入未定义的行为吗
- 对C宏的未定义引用,但在定义它时会出现重新定义错误
- 未定义的引用在哪里
- 编译时的 CImg 库返回对"__imp_SetDIBitsToDevice"的未定义引用
- 对Py_Initialize()的未定义引用
- c++11评估顺序(未定义的行为)
- 使用mysql c++连接器的未定义引用
- 从python调用openMP共享库时,未定义opnMP函数
- 在 Mac 上使用 CMAKE 将 FFTW 和 FFTWPP 链接到项目中时未定义的符号
- Cmake 链接问题:未定义对 Button::mousePressEvent(QGraphicsSceneMouseE
- 未定义的引用 .. 使用 OpenCV 编译 C++ 代码时,从命令行
- 具有外部"c"和程序集的未定义函数
- 此增量后语句是否会导致未定义的行为?
- 尝试调用 .h 文件中定义的变量时出现变量未定义错误
- 在C++中使用内联方法时出现未定义的符号错误
- 对 Scalar ::Scalar() 的未定义引用