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 304 \ 203] 211 \ \ 303fffff \ 204UH 211 \ 345H \ \ 201 354 \ \ 220H} \。 \ 270H \ 211です。 私はそうです:24 1 2.2 aaaボイド*鋳造得る予期しない出力
私はvoid *ポインタキャストに何か問題があると思いますが、私は理由を理解できません。助けてもらえますか?
*ローカル変数*へのポインタを返します。ローカル変数は、関数が終了すると有効範囲外になり、存在しなくなります。そのようなローカル変数へのポインタは無効になります。そのポインタを逆参照しようとすると、[*未定義の動作*](http://en.cppreference.com/w/cpp/language/ub)につながります。そしてあなたはそのような無効なポインタを4つ参照しないでください。要するに、この問題はあなたのキャスティングとは関係ありません。 –
あなたが戻って 'p'を使う瞬間、プログラム全体の動作は未定義です。 – StoryTeller
https://stackoverflow.com/questions/6441218/can-a-local-variables-memory-be-accessed-outside-its-scope?noredirect=1&lq=1 – Mat