【发布时间】:2018-01-06 17:21:44
【问题描述】:
struct mystruct{
int* x;
float *y;
string *z;
mystruct(int* a,float* b, string *c): x(a), y(b), z(c){}
};
void* create(){
int a = 1;
float b = 2.2;
string c = "aaa";
mystruct x(&a, &b, &c);
void* p = &x;
return p;
}
void print(void *p){
mystruct* p1 = static_cast<mystruct*>(p);
cout << *p1->x << " " << *p1->y << " "<<*p1->z<< endl;
}
int main(){
cout << sizeof(mystruct) << endl;
void* p1 = create();
print(p1);
return 0;
}
代码的输出是这样的:24 1 2.76648e+19 \203\304 ]\303fffff.\204UH\211\345H\201\354\220H\211}\270H\211. 我想是:24 1 2.2 aaa
我猜想 void* 指针转换有问题,但我不知道为什么。有人可以帮忙吗?
【问题讨论】:
-
你返回一个指向局部变量的指针。一旦函数退出,局部变量就会超出范围,并且不再存在。指向此类局部变量的指针将变为无效。尝试取消引用该指针将导致undefined behavior。你取消引用四个这样的无效指针。总之,问题与你的选角无关。
-
当你返回并使用
p时,整个程序的行为是不确定的。 -
顺便问一下,您尝试使用
void*演员解决的实际 问题是什么?你为什么这样做?在 C++ 中,您很少需要void*。而且我也没有看到任何特殊需要为结构成员使用指针。 -
谢谢,如果我为这些局部变量动态分配一些内存,会解决这个问题吗?
标签: c++ c++11 casting void-pointers