ページ 1 / 1
メモリアクセス
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ユーザー
ご指摘感です
帰宅後対応します