- ベストアンサー
構造体のメモリ確保のキャストについて
構造体のメモリ確保をする際に、処理系はVC++ 6.0なので キャストしなければならないのですがどうすればよいか分かりません。 構造体にはint型とchar型が入っているのですがこの場合はどのようにキャストすればよいのでしょうか? お願いします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
>構造体のメモリ確保をする際に、処理系はVC++ 6.0なので >キャストしなければならないのですがどうすればよいか分かりません。 やりたいことは、"動的に確保したメモリを構造体として利用したい。"ということでしょうか? そう仮定すると、手順としては。 1.構造体に必要なByte数を計算する。(sizeof等で) 2.必要分のメモリを確保する。(vc++ならnewかな?) 3.確保したメモリ(帰ってきたvoidポインタ)を構造体ポインタとしてキャストする。 4.ポインタとして構造体メンバにアクセスする。 となります。 やりたいことが違ってたらごめんなさい。
その他の回答 (5)
- S117
- ベストアンサー率40% (18/45)
No.5です。豪快に間違えてました。すみません。 mystruct *s; s = new mystruct(); C++だから、structはいらないですね。
- S117
- ベストアンサー率40% (18/45)
なんか、VC++6.0でCを書いてるだけという気もしますが、C++だと仮定して答えます。 構造体を mystructとして struct mystruct *s; s = new mystruct(); で良かったような。 >構造体にはint型とchar型が入っているのですがこの場合はどのようにキャストすればよいのでしょうか? 中身は関係ないのです。構造体を確保すれば、構造体のもつ変数はすべて確保されたことになります。 おまけで、Cの動的確保を struct mystruct *s; s = malloc(sizeof(mystruct));
- machongola
- ベストアンサー率60% (434/720)
こんにちは。以下のどちらかに該当していますか? //構造体 typedef struct tagTEST { int i; char ch; }TEST, *LPTEST; //mallocの場合 void main() { //割り当て・キャスト TEST* p = (TEST*)::malloc(sizeof(TEST)); //使う p->i = 0; p->ch = 0; } //GlobalAllocの場合 void main() { //割り当て HGLOBAL hMem = ::GlobalAlloc(GMEM_MOVEABLE, sizeof(TEST)); //メモリのロック・キャスト TEST* p = (TEST*)::GlobalLock(hMem); //使う p->i = 0; p->ch = 0; }
- Tacosan
- ベストアンサー率23% (3656/15482)
「構造体のメモリを確保するためにキャストしなければならない」ような処理系がこの世に存在したとは思えないなぁ. どういうことをしたいんでしょうか?
- asuncion
- ベストアンサー率33% (2127/6289)
処理系がVC++ 6.0「だから」 キャストしなければならない、という 事情がうまくのみこめません。 可能であれば、そのあたりの事情を説明していただけますか? なお、「どのように」キャストすればよいか、 と聞かれましても、ご自身がそれを「何型として」 使いたいかがわかりませんので、なんともお答えできないです。