undefined-behavior相关内容

是一个(空的)无限循环不确定的用C的行为?

时,比如为(;;)的无限循环; 用C未定义行为? (这是C ++ ,但我不知道关于C) 解决方案 没有,的行为为(;;)语句在C明确界定。 N1570 时,这是对官方2011的ISO基本相同C标准说,在第6.8.5条第6款: 这是循环语句的控制前pression不是一个常数 前pression,即不执行输入/输出操作,不访问 挥发物,并且不执行同步或原子操作 在它的身上,控制 ..
发布时间:2016-08-18 13:09:22 C/C++

C:当指针类型之间没有铸造不确定的行为?

作为一个初来乍到C,我感到困惑铸造一个指针时,实际上是确定。 据我了解,你可以pretty多施放任何指针类型到任何其他类型,编译器将让你做到这一点。例如: int类型的= 5; INT *的IntPtr =安培; A; 字符* charPtr =(字符*)IntPtr的; 但是,一般这种调用未定义的行为(虽然它发生在许多平台上工作)。 此说似乎有一些例外: 您可以施放和从无效* 自由( ..
发布时间:2016-08-18 12:49:46 C/C++

当它是有效的访问指针"死亡"目的?

首先,要澄清,我的不可以谈论取消引用无效指针! 考虑以下两个例子。 示例1 typedef结构{INT * P; }笔;T A = {的malloc(sizeof的(INT)}; 免费(A.P); // A.P现在是不确定的? T B = A; //通过非字符类型访问? 例2 无效美孚(INT * P){}为int * p =的malloc(sizeof的(INT)); 自由(对) ..
发布时间:2016-08-18 12:48:48 C/C++

这是否未定义行为?

考虑下面的C程序: 的#include<&stdio.h中GT;诠释主(){ 诠释一个= -1; 无符号B = -1; 如果(A == B) 的printf(“%D”,A,B); 其他 的printf(“不平等”); 返回0; } 在该行的printf(“%D”,A,B); ,“%D”是用来打印无符号类型。这是否未 ..
发布时间:2016-08-17 23:33:38 C/C++

未指定的,不确定的,对于C实现定义的行为WIKI

虽然有丰富的关于SO这个问题的联系,我觉得有东西丢失:在什么明确的行为之间的区别(USB)通俗的语言解释清楚,未定义行为(UB)和实现定义(IDB)与任何用例和示例的详细,但很容易解释。 注意:我做了的 USB 的缩写,为在这个WIKI紧凑的缘故,但不希望看到它在其他地方使用。 我知道这可能看起来其他职位的副本(它更接近是 ..
发布时间:2016-08-17 23:16:00 C/C++

递减指针出界;递增入界

执行以下操作中的4号线和/或5惹未定义行为: 的#include<&stdio.h中GT; INT主要(无效) { 个char [] =“富”; 字符* P = S - 1; / *行4 * / 的printf(“%S \\ n”,P + 1); / *行5 * / 返回0; } 解决方案 执行以下操作中的4号线和/或5惹未定义行为: 是 4号线的是未 ..
发布时间:2016-08-17 22:59:42 C/C++

涡轮C ++:为什么printf的打印预期值,当没有变量传递给它?

有一个问题是问一个选择题测试:什么将是下列程序的输出: 的#include<&stdio.h中GT;INT主要(无效) { 诠释一个= 10时,b = 5,C = 2; 的printf(“%d个%D \\ n”); 返回0; } 和的选择是10个不同排列,5和2。出于某种原因,它工作在Turbo C ++,这是我们在大学使用。但是,它在用gcc编译时(这使在启用-W ..
发布时间:2016-08-17 22:55:48 C/C++

在64位导致未定义行为的32位无符号乘法?

所以我对这个code: uint32_t的S1 = 0xFFFFFFFFU; uint32_t的S2 = 0xFFFFFFFFU; uint32_t的伏; ... V = S1 S2 *; / *只需要结果的低32位* / 在所有的以下我假定编译器不能对 S1 或 S2 时,初始化只提供上面的例子。 如果我编译这与32位整数大小编译器(例如用于x86编译时),没有问题。编译器会简单地使用 ..
发布时间:2016-08-17 22:44:41 C/C++

对于前pressions定义的行为

C99标准说,在$ 6.5.2。 在previous和下一个序列点的对象应具有其存储的值之间 由前pression的评价最多一次修改。此外,前一个值 应仅被理解为确定值存储到 (由我强调) 它接着注意,下面的例子是有效的(这在第一似乎是显而易见的) A [我] =我; 虽然它没有明确说明是什么 A 和 I 是 虽然我相信这不,我想知道这个例子是否涵盖以下情况: INT I ..
发布时间:2016-08-17 22:22:11 C/C++

在初始化使用新声明的变量(INT X = X + 1)?

我只是偶然发现了一个行为,让我吃惊: 当写: INT X = X + 1; 在C / C ++ - 程序(或涉及新创建的变量x更加复杂的前pression)我的gcc / g ++的编译没有错误。在上述情况下,X是1之后。需要注意的是在范围上没有变量x由previous声明。 所以我想知道这是否是正确的行为(甚至可能在某些情况下非常有用),与一般的我的gcc版本或GCC或只是一个解析器 ..
发布时间:2016-08-17 22:10:59 C/C++开发

序列点和副作用用C

在此 C-FAQ 它提供有关的序点; 标准指出;结果 的previous和下一个序列点之间的对象应具有其存储的值在由前pression评价修改最多一次。此外,前一个值是唯一的访问以确定被存储的值。的 在实施例 I = I ++; 一个由[i] =我++; 这是从这些例子的结果的未定义行为语句的第一句话清楚。结果 在解释声明中的第二句是说; 第二句说:如果对象是一个完 ..
发布时间:2016-08-17 22:10:45 C/C++

为什么字符*导致未定义的行为而的char []不?

试图修改字符串的原因未定义的行为: 的char * p =“维基百科”; P [0] ='w'; //未定义行为 要prevent一种方法是把它定义为一个数组,而不是一个指针:字符P [] =“维基百科”; P [0] ='w'; // 好 为什么的char * 导致未定义的行为,而的char [] 不? 解决方案 试图修改C字符串字面量的未定义行为即可。编译器可安排字符串存储在只读 ..
发布时间:2016-08-17 22:10:42 C/C++

在C99,为f()+ G()未定义或仅仅是不确定的?

我以前认为在C99中,即使功能副作用˚F和先按g 的干扰,虽然前任pression F()+ G()不包含顺序点,˚F和先按g 将包含一些,这样的行为是不确定的:无论是F()将克(),或f之前克()()之前被调用。 我不再那么肯定。如果编译器内联(编译器可以决定,即使函数不声明在线做),然后重新安排指令的功能?可能有获得以上两种不同的结果?换句话说,这是不确定的行为? 这是不是因为我打算写这种 ..
发布时间:2016-08-17 22:00:01 C/C++

我们如何解释前pression的结果(++ x)+(++ X)+(++ x)的?

X = 1; 性病::法院LT&;< ((+ x)​​的+(+ x)​​的+(+ x)​​的); 我希望可以将输出为 11 ,但它实际上是 12 。为什么呢? 解决方案 我们期待通过的未定义行为的,而不是任何特定结果解释。由于前pression试图修改点¯x多次中间没有序列点它的 ..
发布时间:2016-08-17 21:52:02 C/C++开发

这是不确定的Ç行为?

我们的班级是由C编程教授问这个问题: 您将得到code: INT X = 1; 的printf(“%D”,++ X,X + 1); 什么输出将总是产生? 大多数学生说未定义的行为。谁能帮我明白为什么会这样? 感谢您的编辑和答案,但我仍然感到困惑。 解决方案 的输出的可能的是在一切合理的情况下,2。在现实中,你有什么样的是的未定义行为虽然。 具体来说,标准说: 在previo ..
发布时间:2016-08-17 21:50:05 C/C++