電子書籍の厳選無料作品が豊富!

構造体のメモリ確保をする際に、処理系はVC++ 6.0なので
キャストしなければならないのですがどうすればよいか分かりません。

構造体にはint型とchar型が入っているのですがこの場合はどのようにキャストすればよいのでしょうか?

お願いします。

A 回答 (6件)

>構造体のメモリ確保をする際に、処理系はVC++ 6.0なので


>キャストしなければならないのですがどうすればよいか分かりません。
やりたいことは、"動的に確保したメモリを構造体として利用したい。"ということでしょうか?

そう仮定すると、手順としては。
1.構造体に必要なByte数を計算する。(sizeof等で)
2.必要分のメモリを確保する。(vc++ならnewかな?)
3.確保したメモリ(帰ってきたvoidポインタ)を構造体ポインタとしてキャストする。
4.ポインタとして構造体メンバにアクセスする。

となります。
やりたいことが違ってたらごめんなさい。
    • good
    • 0

No.5です。

豪快に間違えてました。すみません。
mystruct *s;
s = new mystruct();
C++だから、structはいらないですね。
    • good
    • 0

なんか、VC++6.0でCを書いてるだけという気もしますが、C++だと仮定して答えます。


構造体を mystructとして

struct mystruct *s;

s = new mystruct();

で良かったような。
>構造体にはint型とchar型が入っているのですがこの場合はどのようにキャストすればよいのでしょうか?
中身は関係ないのです。構造体を確保すれば、構造体のもつ変数はすべて確保されたことになります。

おまけで、Cの動的確保を
struct mystruct *s;
s = malloc(sizeof(mystruct));
    • good
    • 0

 こんにちは。

以下のどちらかに該当していますか?

//構造体
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;
}
    • good
    • 0

「構造体のメモリを確保するためにキャストしなければならない」ような処理系がこの世に存在したとは思えないなぁ.


どういうことをしたいんでしょうか?
    • good
    • 0

処理系がVC++ 6.0「だから」


キャストしなければならない、という
事情がうまくのみこめません。

可能であれば、そのあたりの事情を説明していただけますか?

なお、「どのように」キャストすればよいか、
と聞かれましても、ご自身がそれを「何型として」
使いたいかがわかりませんので、なんともお答えできないです。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!