C++ 为什么在将void指针转换为整数指针时会出现分段错误 使用名称空间std; void*fun(int); int main() { int i; cin>>i; int*t=(int*)乐趣(i); 如果(!t) 不能

C++ 为什么在将void指针转换为整数指针时会出现分段错误 使用名称空间std; void*fun(int); int main() { int i; cin>>i; int*t=(int*)乐趣(i); 如果(!t) 不能,c++,pointers,C++,Pointers,您将i的值作为指针返回,但该值本身不是指针,因此无法取消引用 您只需将其转换为正确的类型,并按原样打印即可: return (void *)i; coutvoid*fun(inti) 这与main中的i不同,它是仅在此函数范围内从不同位置复制的fun。通过其地址在函数范围外使用它将导致未定义的行为。因此,请改为通过引用传递,它将从main中获取相同的i void*fun(int&i) 第二件事是将一个整数强制转换为void*。这是将一个整数转换为地址位置并再次取消对它的引用 return(vo

您将
i
值作为指针返回,但该值本身不是指针,因此无法取消引用

您只需将其转换为正确的类型,并按原样打印即可:

return (void *)i;
cout
void*fun(inti)

这与main中的
i
不同,它是仅在此函数范围内从不同位置复制的
fun
。通过其地址在函数范围外使用它将导致未定义的行为。因此,请改为通过引用传递,它将从main中获取相同的
i

void*fun(int&i)

第二件事是将一个整数强制转换为
void*
。这是将一个整数转换为地址位置并再次取消对它的引用

return(void*)&i;


将返回的地址可以重新转换回
int*

(void*)“<代码> >不是<代码> > <代码>,它的值是<代码> i <代码> >到<代码>空白>代码>。这样的指针不指向任何东西。C++程序中的C样式的铸造应该被认为是一个红旗,您做了一些错误的事情。而且,很少有必要使用C++中的<代码> Value*/Cux>指针。什么是真正的PROB?您试图解决的lem?为什么需要
void*
指针?为什么函数返回的值被转换为指针?您希望它打印什么值?@Yksisarvinen事实上它没有。不仅转换有问题,而且从函数返回的
void*
也有问题dangling@formerlyknownas_463035818不是真的晃来晃去,只是一个无效指针的值(因为函数实际上不返回指针)。@Someprogrammerdude以及通过引用传递它不会
return (void *)i;
cout << reinterpret_cast<intptr_t>(t) << '\n';