undefined-behavior 相关问题

编译或执行打破语言规则的程序的不可预测的结果,编译器,解释器和运行时系统都不得强制执行。

即使正在访问的成员已充分对齐,访问未对齐联合的成员是否会出现未定义行为?

在 C 中,如果我尝试通过未对齐的指针访问类型,则可能会发生不好的事情: 整数x[2]; // 假设 CHAR_BIT == 8 && sizeof(int) == 4 *(int *)((char *)x+1) = 10; /* 未定义

回答 1 投票 0

分配内存后使用指针是否是未定义的行为?

我有以下代码: uint8_t 缓冲区[16]; uint8_t 数据[16]; uint8_t buffer_length = 16; uint8_t 数据长度 = 0; memcpy(缓冲区 + buffer_length, 数据, data_length); memcpy 应该是空操作,

回答 1 投票 0

更改 const Class 函数中类指针的值会在某些编译器中出现错误,但在其他编译器中不会出现错误

我有下面的代码,它在某些编译器中给出“分段错误”错误,但对于其他编译器,它给出“40”作为输出。为什么会有差异? #包括 我有下面的代码,它在某些编译器中给出“分段错误”错误,但对于其他编译器,它给出“40”作为输出。为什么会有差异? #include <stdio.h> class A{ int *ptr; public: void set(int val) const; }; void A::set(int val) const{ *ptr = val; printf("%d", *ptr); } int main(){ A a; a.set(40); return 0; } ptr 是一个未初始化的指针。当您遵循统一化指针时,它是未定义的行为,任何事情都可能发生。 你应该在构造函数中初始化ptr class A{ int *ptr; public: A(); void set(int val) const; }; A:A() { ptr = new int(); } A:~A() { delete ptr; }

回答 1 投票 0

在自引用结构中使用 'static 来引用 Box 可以吗?

给出下面的代码片段: 使用 std::{io::BufWriter, pin::Pin}; pub 结构自引用 { pub writer: BufWriter<&'static mut [u8]>, // 从缓冲区借用 酒吧缓冲区:Pin&l...

回答 1 投票 0

在什么时候取消引用空指针会变成未定义的行为? [重复]

如果我实际上没有访问取消引用的“对象”,那么取消引用空指针仍然未定义吗? 整数* p = 0; int& r = *p; // 不明确的? int* q = &*p; // 不明确的? 有点...

回答 2 投票 0

将 char * 转换为 void **

假设我有: 字符 * bufPtr = ...; // 指向至少剩余 sizeof(void *) 个字符的 char 数组 无效 *ptr1 = ...; 无效*ptr2; 假设 bufPtr 正确对齐,以下行是 ...

回答 1 投票 0

++i + ++i + ++i

int i=2; 我 = ++i + ++i + ++i; 哪个更正确? Java 的结果为 12 或 C = 13。或者如果不是正确性问题,请详细说明。

回答 4 投票 0

Engineered bool 比较等于 true 和 false,为什么?

下面的示例可以编译,但输出相当奇怪: #包括 #包括 结构A { 整数a; 字符b; 布尔c; }; int main() { 一个v; 标准::

回答 5 投票 0

使用指针的整数值检查指针对齐是否真的定义良好?

是否有一种有保证的(不是实现定义的!)方法来检查指针对齐? 查询指针对齐的最常见方法似乎是: 转换为整数 检查整数是否为

回答 1 投票 0

C++20之前所有程序都是UB?

昨天我在大卫·斯通的演讲中听到了这一点 在 C++20 之前,不可能实现 std::vector,所有向量实现(如果用 C++ 编写)都具有未定义的行为。 但是...

回答 1 投票 0

你能从函数返回 std::string 并存储 c_str() 的结果吗?

我们最近在大学举办了一次讲座,我们的教授告诉我们在使用不同语言编程时要注意的不同事项。 以下是 C++ 中的示例: std::字符串

回答 9 投票 0

函数调用中的临时值:UB? [重复]

根据此答案考虑以下代码: #包括 #包括 类 StringBuilder { 民众: 模板 内联 StringBuilder &opera...

回答 1 投票 0

这些表达式是在C中定义的吗?

这些表达式定义了吗? 整数 x = 5, y; y = ++(int){++x}; //或者 y = (int){x++}++; 并且(我找不到任何不被定义的理由) 整数x = 5; x = ++(int){++x}; /...

回答 1 投票 0

修改我也有一个 const 指针指向的值是否是未定义的行为

以下场景是否有未定义的行为? void do_stuff(const int *const_pointer, int *pointer) { printf("%i “,*const_pointer); *指针=1; } 整数数据=0; do_stuff(&da...

回答 2 投票 0

我可以在 C 中分配或返回具有未分配元素的结构吗?

在 C 语言中,使用未初始化的变量是未定义的行为。包括: 整数x; 整数 y = x; 但是,假设我有以下内容: 结构体{ 整数a; 整数b; }; 结构 结构 s; s.a = 1; ...

回答 1 投票 0

无条件创建指向向量最后一个元素的指针合法吗?

我有以下C++代码: 空栏(int&); 无效巴兹(); void foo(std::vector& v) { int* 指向最后一个的指针 = v.data() + (v.size() - 1); if (v.size() > 0 && *

回答 2 投票 0

C++11 中 i += ++i 是未定义行为吗?

我非常相信我发现的解释,就C++11而言,i = ++i 不是未定义的,但我无法判断 i += 的行为是否++i 是明确定义的 o...

回答 1 投票 0

(++i)++ 是未定义的行为吗?

(++i)++ 是未定义的行为吗?前缀增量的副作用是否可能在检索增量对象以进行后缀增量操作后发生?这看起来很奇怪...

回答 2 投票 0

C++ 函数调用的“未定义”与“未指定”行为:f(i=-2, i=-2) 不再是未定义 vs f(++i, ++i) 未指定

我知道这是“未定义行为”问题之一,但是当前有关该主题的 cppreference 页面(截至 C++23)本身给出了两个示例,我无法理解这些示例...

回答 1 投票 0

C++ 规范函数调用的“未定义”与“未指定”行为:f(i=-2, i=-2) 不再是未定义 vs f(++i, ++i) 未指定

我知道这是“未定义行为”问题之一,但当前的 C++ 规范(从 C++23 开始)本身给出了两个示例,我很难从其后续规则中理解它们...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.