【发布时间】:2019-12-13 08:22:37
【问题描述】:
我对 void 指针感到困惑。尽管此代码片段可以编译,但在函数 f2 中取消引用变量 c 的行为是否未定义?
#include <cstdlib>
#include <cstdio>
void f2(void* c) { // legal/stupid
// although this compiles, is dereferencing c here undefined behaviour?
}
void f1(void** b) {
printf("%d\n", *(int*)*b);
f2(b);
}
int main() {
int i{ 5 };
void* a{ (void*)&i };
f1(&a);
return 0;
}
【问题讨论】:
-
用花括号初始化变量有什么特别的原因吗?此外,最好在问题中包含您认为此代码调用 UB 的原因... :)
-
你不能取消引用空指针。
-
除非您必须使用 C API,否则我建议您远离 void 指针。 C++ 有一个非常好的类型系统,模板取代了对 void 指针的需求。
-
@NeilButterworth 是 right,但我认为 OP 并不是故意要问这个的。我猜 .. :)
-
@sid 你有什么理由在 C++ 中搞乱原始指针?
标签: c++ void-pointers