undefined-behavior相关内容

难道整数溢出会导致不确定的,因为内存损坏行为?

我最近读到,在C和C ++符号的整数溢出导致未定义行为: 如果一个前pression的评估过程中,结果不是数学定义或没有针对其类型重新presentable值的范围,行为是不确定的。 我目前想了解这里的不确定的行为的原因。我想是因为整数开始自己周围操纵内存,当它变得太大,以适应基础类型出现在这里未定义的行为。 所以我决定在Visual Studio 2015年写的一个小测试程序来测试 ..
发布时间:2016-08-19 16:04:00 C/C++开发

鉴于堆栈,寄存器的状态,可我们predict的printf的的不确定行为的结果

下面是一些简单的C code一类测验: 的#include<&stdio.h中GT;诠释主(){ 浮动= 2.3; 的printf(“%d个\\ N”,一); 返回0; } 编译和运行上: 苹果LLVM版本6.1.0(铛-602.0.53 )(基于LLVM 3.6.0svn)结果 目标: x86_64的 - 苹果-darwin14.5.0 这code的输出是未定义。我用 ..
发布时间:2016-08-19 15:32:09 C/C++

用C打印顺序

INT X = 10; 的printf(“%d个%D \\ n”,X + X,X ++); 的printf(“%D%D”,X,X + 20,X + 30); 在打印输出 12 12 10 12 32 42 为什么第一个printf的顺序是相反的顺序,为什么不能在第二printf语句? 我在C使用反向打印顺序一本书找到。 解决方案 您code的未定义行为(“UB”)。因此,任何事情都 ..
发布时间:2016-08-19 15:30:52 C/C++

评估包含未初始化指针的条件 - UB,但它会崩溃?

某处在论坛上我遇到这样的: 任何试图评估一个未初始化的指针变量 调用未定义的行为。例如:INT * PTR; / *未初始化* / 如果(PTR == NULL)...; / *不确定的行为* / 这是怎么意思? 是不是意味着,如果我只写:如果(PTR == NULL){INT吨;}; 这句话已经是UB? 为什么?我不取消引用指针吧? (我在这种情况下,注意到有可能术语问题,通过UB,我 ..
发布时间:2016-08-19 14:18:55 C/C++

是foo(我+ +)+富(我++)未定义的ANSI C?

下面是一个例子片断: INT I = 4,B; B = foo的(我+ +)+富(我++); 我是pretty确定它的不可以未定义的,因为有一个序列点富的调用之前。但是,如果我编译code。与生成编译器警告 -Wall 标志,它说警告:操作上的'我'可能未定义。我知道它说可以,但我只是想仔细检查,如果我是正确的。 解决方案 的行为是不确定的。 B = foo的(我+ +)+富(我++ ..
发布时间:2016-08-19 13:59:39 C/C++

从函数调用顺序点?

这是另一个序列点的问题,而是一个相当简单: 的#include<&stdio.h中GT; 无效F(INT P,INT){ 的printf(“P数:%d \\ n”,p)的; }INT克(INT * P){ * p值= 42; 返回0; }诠释主(){ INT p值= 0; F(P,G(&放大器; P)); 返回0; } 这是不确定的行为?还是调用克(&安培; P ..
发布时间:2016-08-19 13:42:20 C/C++开发

是否释放其被分配到一个char *(由`malloc`分配)一个int *未定义行为?

标题可能混淆。假设 STR 是按分配的指针的malloc。 PTR ,类型为int * ,分配给它,如由下面的code片段被释放 的char *海峡=的malloc(64); 为int * PTR = str中;免费(PTR); 我试图编译上面的code。它只是给出了一个警告: source_file.c:在函数'主': source_file.c:10:16:警告:初始化从兼容的指针类型 ..
发布时间:2016-08-19 13:38:02 C/C++

除数为零:未定义行为或实施在C和/或C ++中定义?

对于被零除,标准说: C99 6.5.5p5 - /运算的结果是从由第二所述第一操作数的除法的商; %操作的结果是余数。在这两个操作,如果第二操作数的值是零,其行为是未定义 C ++ 03 5.6.4 - 二进制/运营商产生的商,和二元运算符%收益率从第二个第一八佰伴pression的余数。如果/或%第二个操作数为零,则行为未定义。 如果我们把上面的段落面值,答案显然是未定义行为 ..
发布时间:2016-08-19 13:31:37 C/C++开发

对于短整型scanf函数的奇怪行为

在code是如下: 的#include<&stdio.h中GT; 主要() { INT M = 123; INT N = 1234; 短整型一个; A =〜0; 如果((A>>!5)=一){ 的printf(“逻辑移位\\ n”); M = 0; } 其他{ 的printf(“算术移位\\ n”); m = 1时; } scanf函数(“%d个”,& ..
发布时间:2016-08-19 00:28:07 C/C++

未定义行为和顺序点

从过去的几天里,我试图了解未定义行为。前几天我发现了一个 C-FAQ 链接。这有很大帮助清除很多困惑,但是当我阅读问题创建另一大混乱# 3.8 。经过我很多的努力,理解语句(特别是第二句); 本标准规定 的的previous和明年顺序点对象所之间的由前pression评价修改最多一次存储的值。此外,前一个值是唯一的访问以确定被存储的值。的 我感觉好多问上所以这问题但没有答案的有解释这 ..
发布时间:2016-08-19 00:09:28 C/C++

它是非法使用h或hh长度修改时,相应的参数的printf不是一个短/字符?

的的printf 系列函数提供一系列长度修改的,其中两个是 HH (表示一个符号字符或晋升为unsigned char型参数 INT )和 ^ h (表示一个符号短或无符号短参数提升为 INT )。从历史上看,这些长度修改只被引入到与 scanf函数的长度修改创建对称,很少用于的printf 下面是ISO的9899摘录时间:2011年§7.21.6.1“fprintf函数”¶7: 7的长度 ..
发布时间:2016-08-18 23:54:15 C/C++

Ç - 是一个不确定的值不确定的?

根据这个帖子一个不确定的值是: 3.17.2 1不确定的值 无论是一个未确定的值或重新presentation陷阱 据谷歌,不确定的定义是: 不特定的,已知的或已建立 左怀疑;含糊。 据thefreedictionary,确定为: 能够被确定 据韦氏,以确定(在特定情况下)是: 要找出或通过调查,推理或计算来决定关于 因此​​,根据常理判断,即使一个不确定的值是在编译时未知,所 ..
发布时间:2016-08-18 23:54:03 C/C++

理由比较指针数组外面是UB

所以,标准(指 N1570 )称,比较指针如下: C99 6.5.8 / 10关系运算符 当两个指针进行比较,结果取决于相对上 中的对象的地址空间中的位置指向。 ... [喀嚓比较明显的定义,聚集内] ... 在其他情况下, 该行为是不确定的。 什么是UB的这个实例的理由,而不是指定(例如)转化为使用intptr_t 和这种对比? 有一些机器架构,其中三分球上一个明智的 ..
发布时间:2016-08-18 23:36:15 C/C++

序列点和副作用:在C11安静的变化?

C99§6.5前pressions (1)的前pression是指定一个值的计算运算和操作数的序列,或者,指定的对象或功能,或产生副作用,或执行它们的组合。 (2)previous和下一个序列点之间的对象应具有其存储的值在由前pression评价修改最多一次。 72)此外,前一个值是只读的,以确定该值将被存储。 73) 与脚注 72)的浮点状态标志不是一个对象,并且可以多次 ..
发布时间:2016-08-18 23:16:08 C/C++

为SUM +++我用C不确定的行为?

我测试了不同的机器上,并在不同的编译器,但我给出了相同的输出: INT总和= 10,I = 5; 的printf(“%d个”,总和+++我); 在C这明确或不确定的行为? 解决方案 这是很好的界定。 总和+++我被解析为总和++ + I ,结果为 15 (含递增的副作用之)。 C11 6.4节词汇元素 如果输入流被解析为preprocessing令牌到一个给定的字 ..
发布时间:2016-08-18 23:10:35 C/C++

为什么不匹配的printf未定义行为的转换说明论点?

在两个C(n1570 7.21.6.1/10)和C ++(由包含C标准库)是未定义的行为提供一个参数的printf的类型不匹配的转换规范。一个简单的例子: 的printf(“%d个”,1.9) 格式字符串指定一个int,而参数是一个浮点类型。 此问题是由用户是谁遇到遗产code与转换不匹配的丰富,这显然没有损害,参见问题的启发未定义行为在理论上和实践中。 声明一个单纯的格式不符UB似乎激烈 ..
发布时间:2016-08-18 23:09:09 C/C++开发

C标准兼容的方式来访问空指针的地址?

在C,deferencing的的空指针的是未定义行为,但空指针值有一点重presentation,在某些架构使得它指向一个有效的地址(如地址0 )。结果 让我们把这个地址的空指针地址的,为了清楚起见。 假设我想用C编写一个软件,在奔放的访问内存的环境。进一步假设我想在空指针的地址写一些数据:我怎么会实现,在一个标准兼容的方式 的例的情况下(IA32E):的 的#include< st ..
发布时间:2016-08-18 22:34:12 C/C++