undefined-behavior

    10热度

    6回答

    在C中,您可以投射简单数据类型,如int,float以及指向这些的指针。 现在我假设如果你想从一个指针转换为另一个类型的值(例如从*float到int),那么转换和解引用的顺序并不重要。即对于变量float* pf,您有(int) *pf == *((int*) pf)。数学中有类似的交换性... 但是,这似乎并不是这种情况。我写了一个测试程序: #include <stdio.h> int m

    2热度

    2回答

    SDL_Event是一个无符号8位类型的联合,以及许多其第一个元素是无符号8位类型的结构。建议的用法是访问联合的Uint8元素以确定事件的类型,然后通过适合该类型的元素访问联合。 这显然取决于联合中具有为类型标识保留相同空间的所有类型。我们可以确定这是事实,还是这种未定义的行为? 编辑:使标题更具描述性。

    11热度

    4回答

    该问题出现在答案的评论的问题Is C/C++ bool type always guaranteed to be 0 or 1 when typecast'ed to int? 有问题的代码分配的bool(本地)阵列而不初始化它们的值。 const int n = 100; bool b[n]; 很明显,b中的值是不确定的。 一些评论者认为阅读例如b[0]是未定义的行为。这是C++标准中的任

    7热度

    3回答

    根据我的小测试这段代码的作品。但是,它有没有未定义的行为?通过使用const_cast修改const对象导致了我之前测试中的运行时访问冲突,但我不记得它们有什么不同。那么,这里有没有根本的问题呢? // test.h #pragma once #include <boost/array.hpp> typedef boost::array<int,100000> bigLut_t; ext

    2热度

    5回答

    我正在执行代码审核以解决很少发生的实时环境问题。它在调试环境中不可重现,因此调查的唯一方法是实时环境和代码分析的核心转储。这是形势的总结: 核心转储: (gdb) bt #0 in strlen() from /lib/libc.so.6 #1 in std::basic_string<char, std::char_traits<char>, std::allocator<char> >::

    1热度

    3回答

    请看看这段代码 int i = 10; //line 1 int *p = &i; //line 2 delete p; //line 3 cout << "*p = " << *p << ", i = " << i << endl; //line 4 i = 20; //line 5 cout << "*p = "

    0热度

    1回答

    当我这样做时,我遇到了非常奇怪的行为。我认为这是问题的根源,但我可能是错的。如果你们中的任何可以证实这确实是不确定的行为,我至少知道发生了什么事情 想我已经(不假装编译) subroutine X real, allocatable :: block(:,:) allocate(block(20,20)) call Sub(block(1:5, 1:5)) ! h

    16热度

    1回答

    从C++标准的部分§3.9.1/ 6说,bool类型 值可以是true或false。 现在考虑这个代码, void f(bool b) { switch(b) //since b is bool, it's value can be either true or false! { case true: cout << "possible value - true"

    5热度

    4回答

    $ 5.2.11/7 - “[注:根据 类型通过指针,左值或指针 数据成员从 的const_cast该擅自抛弃所造成的对象,写入操作 的一个 常量-qualifier68)可以产生 未定义的行为(7.1.5.1)。]” 此单元(C++ 03)的字眼是令人惊讶我。什么是惊奇是两件事。 a)首先,使用“可能”。为什么会'可能'?标准中的其他地方对于未定义的行为非常确定 b)为什么要抛弃最初的const

    1热度

    2回答

    目前,我有一个名为Data的字符串流。我要求的字符串流的开始使用: Data.seekp(0, std::ios::beg); 于是,我试着写2个整数的前8个字节的字符串流(以前,前8个字节被设置为0) Data.write(reinterpret_cast<char*>(&dataLength),sizeof(int)); Data.write(reinterpret_cast<char*