53得票4回答
何时可以访问指向“已死”对象的指针?

首先,澄清一下,我不是在谈论取消引用无效指针的问题! 考虑以下两个例子。 示例1 typedef struct { int *p; } T; T a = { malloc(sizeof(int) }; free(a.p); // a.p is now indeterminate? T...

52得票3回答
为什么常量表达式中有未定义行为的例外?

我正在研究核心常量表达式*中允许的内容,该内容涵盖在C++标准草案第5.19节常量表达式的第2段中,其中说道: 条件表达式是核心常量表达式,除非它涉及以下之一作为可能评估的子表达式(3.2),但未评估的逻辑AND(5.14)、逻辑OR(5.15)和条件(5.16)操作的子表达式不被视为[注...

52得票12回答
如果你在多个平台上部署,未定义行为是否是一个问题?

大多数关于未定义行为(UB)的讨论都是关于某些平台可能会这样做,或者某些编译器会那样做。 但如果您只关心一个平台和一个编译器(相同版本),并且知道您将使用它们多年呢? 除了代码之外,没有任何变化,而UB不是实现定义的。 一旦UB已经在那个体系结构和编译器上表现出来,并且您已经进行了测试,...

52得票3回答
std::min(0.0, 1.0)和std::max(0.0, 1.0)会导致未定义的行为吗?

这个问题很清楚。下面是我认为这些表达式可能导致未定义行为的原因。我想知道我的推理是对还是错,以及为什么。 (IEEE 754) double不是Cpp17LessThanComparable,因为由于NaN,<不是严格的弱序关系。因此,违反了std::min<double>...

51得票6回答
整数溢出是否会导致内存破坏而产生未定义行为?

我最近读到,C和C++中的有符号整数溢出会导致未定义行为: 如果在表达式求值过程中,结果在其类型的可表示值范围内没有数学定义或不在该类型的可表示值范围内,则行为是未定义的。 我目前正在尝试理解此处未定义行为的原因。我认为未定义行为发生在此处,是因为整数在变得太大而无法适应基础类型时...

50得票1回答
sscanf("123456789123456789123456789", "%d", &n)是否有定义行为?

当sscanf()或者其他scanf函数族中的一个函数被给予一串数字,其转换后的值超过了目标整型类型的最大值时, 该转换是否应视为失败? 该行为是否有定义?

49得票2回答
从本地C语言风格的数组返回指针导致悬空指针问题

我对以下代码有点困惑:#include <iostream> const char* f() { const char* arr[]={"test"}; return arr[0]; } int main() { auto x = f(); st...

48得票2回答
这是编译器优化错误还是未定义行为?

我们有一个恼人的 bug,我无法解释围绕着这段代码发生。unsigned char bitmap[K_BITMAP_SIZE] = {0} ; SetBit(bitmap, K_18); // Sets the bit #18 to 1 for(size_t i = 0; i < K_...

47得票9回答
为什么这样做有效:从std::string函数返回C字符串字面值并调用c_str()函数。

我们最近在大学里听了一场讲座,教授告诉我们在不同编程语言中编程时需要注意的不同事项。以下是C++的一个例子:std::string myFunction() { return "it's me!!"; } int main(int argc, const char * argv[])...

47得票3回答
对于空值(或未定义)指针的realloc操作

我在阅读关于realloc的内容时,对其中提到的一个点感到困惑。考虑下面的代码:#include <stdio.h> #include <stdlib.h> int main () { int* ptr = NULL; ptr = realloc(p...