ページ 11

メモリアクセス

Posted: 2013年2月05日(火) 13:22
by Cユーザー

コード:


typeset struct header
{
   long point;
   long count;
}HEADER;

typedef struct lineinfo
{
   time_t  time;
   char  str[100];
}LINEINFO;

typedef struct info
{
    HEADER h;
     //    LINEINFO 
}INFO;

上記のINFO構造体のコメントの部分に
LINEINFOの配列をHEADERのメンバーのcount
分宣言したいのですがコンパイルが通りません。

おそらくポインターで宣言してメモリ確保する必要が
あるかと思います。

INFO* i = (INFO*)malloc(...
という感じでメモリ確保した後、
どういう風に値を書き込んだりするのかわかりません。

ご教授お願いします

Re: メモリアクセス

Posted: 2013年2月05日(火) 13:27
by beatle
うーん。イマイチ何がやりたのか分かりませんので想像で回答します。
HEADERのcountは変数なので、実行時にならないと値が決まりません。
ということで

コード:

typedef struct info
{
    HEADER h;
    LINEINFO *lineinfo;
} INFO;

INFO i;
i.lineinfo = (LINEINFO*)malloc(sizeof(LINEINFO) * i.h.count);
のようにしなければなりません。

Re: メモリアクセス

Posted: 2013年2月05日(火) 13:42
by Cユーザー
レスありがとうございます

その後1つ目のLINEINFOのデータを入れるとき
どのようにしたらいいのでしょうか
memcpy(i.lineinfo・・・

的な感じになると予想してます
またこんな感じでcount分値を入れ
後から3番目に入れたLINEINFOにアクセスして値を取りたい場合
どういうコードになりますか?

Re: メモリアクセス

Posted: 2013年2月05日(火) 13:52
by h2so5
Cユーザー さんが書きました:レスありがとうございます

その後1つ目のLINEINFOのデータを入れるとき
どのようにしたらいいのでしょうか
memcpy(i.lineinfo・・・

的な感じになると予想してます
memcpyを使うということはどこかにコピー元のデータがあるというこうでしょうか?

配列の特定の位置に個別にアクセスしたいのであれば、

コード:

// 一つ目のデータ
i.lineinfo[0] = ...;

// 3つ目のデータ
i.lineinfo[2] = ...;
のようになります。

Re: メモリアクセス

Posted: 2013年2月05日(火) 13:57
by softya(ソフト屋)
前のトピックを放置しないようにお願いします。
解決内容の書き込みと解決チェックを行うのがルールとなっております。 フォーラムルール → http://dixq.net/board/board.html
「CreateFileMapping • C言語交流フォーラム ~ mixC++ ~」
http://dixq.net/forum/viewtopic.php?f=3&t=12438

【追記】
まず、どのようなデータ構造か説明してもらった方が良いと思います。
それとlongを意図的に使っているんでしょうか? LP64とLLP64ではサイズが違ってくるのですが。
「整数型 - Wikipedia」
http://ja.wikipedia.org/wiki/%E6%95%B4% ... B.E5.90.8D

Re: メモリアクセス

Posted: 2013年2月05日(火) 14:56
by Cユーザー
ありがとうございます

最後のアクセス方法が知りたいことでした

Re: メモリアクセス

Posted: 2013年2月05日(火) 14:59
by Cユーザー
ご指摘感です
帰宅後対応します