undefined-behavior相关内容
我最近碰到一个帖子什么是COUT正确答案<< C ++<< Ç;?,想知道是否输出 INT C = 0; 的printf(“%D”,C ++,C); 也是不确定的? 我已经研究在得到一个分号修复后和preFIX运营商增值后才讲座。所以根据我来说,输出 0 是正确的! 解决方案 我已经研究了讲座。修复后和preFIX运营商增值只得到一个分号了。 发送您
..
我不知道我的非常的理解到未定义行为可能危及程序的程度。 让我们说我有这个code: 的#include<&stdio.h中GT;诠释的main() { INT V = 0; scanf函数(“%d个”,&安培; 5); 如果(ⅴ!= 0) { INT * P; * P = V; //哎呀 } 返回伏; }
..
从我的系统上的手册页: 无效的memmove *(无效* DST,常量无效* SRC,为size_t的len); 描述结果 该memmove与()函数将len个自的字符串src字节串DST。结果 两个字符串可以重叠;副本总是以非破坏性的结果,完成 方式。 从C99标准: 6.5.8.5当两个指针进行比较,则结果取决于 在地址相对位置 物体的空间指向。如果 两个指
..
编辑:这个问题不好旨在为有关的不确定的行为(德)值得讨论的论坛,但是这是那种什么成了。在任何情况下,这个线程关于一个假设C编译器使用没有未定义的行为可能是额外的利息那些谁认为这是一个重要的话题。 的“未定义行为”的经典例子杜撰的,当然,“鼻魔”—物理不可能的,无论什么样的C和C ++标准允许。 由于C和C ++社区往往把这样一个注重未定义行为未predictability和观念,编
..
可能重复:结果 常量和指针用C 的#include<&stdio.h中GT; 诠释的main() { const int的一个= 12; INT * P; P =&放大器;一个; * p = 70; } 将它的工作? 解决方案 这是“未定义的行为”,这意味着基于您不能当您尝试这个predict会发生什么标准。根据特定的计算机,编译器和程序状态的不同
..
我知道未初始化的局部变量是未定义的行为( UB 的),也值可能有陷阱重新presentations这可能会影响进一步的操作,但有时我想使用随机数仅用于视觉重新presentation和在程序的其他部分将不进一步使用它们,例如,设置一些与随机颜色的视觉效果,例如: 无效updateEffect(){ 的for(int i = 0; I< 1000;我++){ INT
..
我只是考试今天我的课---阅读C code和投入,以及所需的答案是会出现什么样的画面上,如果程序实际运行。其中一个声明的问题 A [4] [4] 作为一个全局变量,并在该程序的一个点,它试图访问 A [27 ] [27] ,所以我回答类似“
..
以下code进入海合会一个无限循环: 的#include<&iostream的GT; 使用命名空间std;诠释主(){ INT I = 0x10000000处; INT C = 0; 做{ C ++; 我+ =我; COUT<< I<< ENDL; }而(ⅰ大于0); COUT&LT
..
我要问的是著名的“struct的最后一个成员具有可变长度”的把戏。它是这样的: 结构T { INT LEN; 个char [1]; };结构T * p =的malloc(sizeof的(结构T)+ 100); P->的len = 100; 的strcpy(对GT; S,“世界你好”); 的由于该结构在内存布局方式,我们能够覆盖在结构上比必要块较大和治疗的最后一个成员,就好
..
如果我有: 无符号整数X; 点¯x - = X; 很显然, X 的应的是这个前pression后为零,但我到处看看,他们说的行为的这个code是不确定的,而不仅仅是值 X (直到减法之前)。 两个问题: 是的行为的这个code确实未定义的?结果 (例如可能会在code崩溃[或更糟]一个兼容的系统上?) 如果是这样, 为什么的并Ç说,的行为的是不确定的,当它是非常清楚, X 这里
..
什么是C和C ++不确定的,不确定的,和实现定义的行为之间的区别? 解决方案 未定义行为的是C和C ++语言的那些方面,可奇怪的程序员1从其他语言(其它语言试图更好地隐藏)。基本上,它是可以编写不以predictable行为方式,即使在节目许多C ++编译器不会报告任何错误的C ++程序! 让我们来看看一个典型的例子: 的#include<&iostream的GT;诠释的main
..
INT主(INT ARGC,字符** argv的) { INT I = 0; I = I + + + +我; 的printf(“%d个\\ N”,I); // 3 I = 1; I =(我++); 的printf(“%d个\\ N”,I); // 2,应为1,不是吗? 挥发性INT U = 0; û= U + + + + U; 的printf(“
..
我在的boost :: hold_any 文件看,我发现了一些东西混淆了我。如果我认为我的信息通过回答我的问题有:
..
什么是未定义位运算符的逻辑? VAR X; 的console.log(X); //未定义 的console.log(X ^ 7); // 7 的console.log(7 ^ x)的; // 7 的console.log(X | 7); // 7 的console.log(7 | X); // 7 的console.log(7和; X); // 0 的console.log(X和7); //
..
什么是这两个宏之间的区别? 的#define交换(A,B)(((一)^(B))及及((A)^ =(B)^ =(A)^ = (二))) 或者的#define交换(A,B)(((一)^(B))及及((B)^ =(A)^ =(B),(一个)^ =(b))) 我看到了第二个宏 rel=\"nofollow\">但不明白为什么它未写入像第一个?是否有特殊原因,我错过了? 解决方案 首先会调用的
..
我键入下面的程序: 的#include<&stdio.h中GT;诠释主要(无效){ int类型的= 3; INT B = 42; 的printf(“a =%d个\\ NB =%d个\\ N”,A,B); 的printf(“交换价值\\ n”); 一个^ = B ^ = a ^ = B; 的printf(“a =%d个\\ NB =%d个\\ N”,
..
我刚检查了的 C ++ 的标准。看来下面code不应该未定义行为: 无符号整数VAL = 0x0FFFFFFF; unsigned int类型解析度= VAL>> 34; //资源应该由C ++标准是0, //但GCC给出警告,资源是67108863 和从标准: E1 >> E2的值是E1右移E2位的位置。
..
我问自己,如果这些线code的可以在C和用C产生不确定的行为++。 我试着回答每一个点读什么标准说有关数组下标(C 6.5.6 - 8)。我没有贴全款,因为它是pretty长。 此外,如果前pression P 指向最后一个 数组对象的元素,前pression (P)+1 点中的一个过去的最后一个元素 数组对象,如果前pression 问:点中的一个过去的数组对象的最后一个元素, 恩
..
一个从C标准未定义行为的例子中读取(J.2): - 一个数组下标超出范围,即使对象是与明显访问 定标(如在左值前pression一个[1] [7]指定的声明INT 一个[4] [5])(6.5.6) 如果该声明从改变int类型的[4] [5] 到 unsigned char型A [4] [5] ,并访问 A [1] [7] 仍然导致未定义的行为?我的看法是,它没有,但我从其他人谁不
..
它是未定义的行为,如果我经过一个二维数组的按以下方式?元素 INT v [5] [5],I;对于(I = 0; I&小于5 * 5 ++ⅰ){ v [我] =我; } 话又说回来,它甚至不能编译? (我不能尝试,现在,我不在家)。如果没有,那么想象我莫名其妙地获得一个指向第一个元素,并使用诉 taht而不是[I] 。 解决方案 从指针到第一个元素访问多维数组的元素是UB对于
..