構造体配列の動的確保&使用方法 – プログラミング – Home

構造体配列の動的確保&使用方法
 
通知
すべてクリア

[解決済] 構造体配列の動的確保&使用方法

固定ページ 1 / 4

KENBO
 KENBO
(@KENBO)
ゲスト
結合: 19年前
投稿: 55
Topic starter  

VC6.0 XP ダイアログベースです。

#define MAX_LOG_DATA_NUM 27593 // 最大LOGデータ数
#define MAX_LOG_DATA_LEN 0x64 // 最大LOGデータ長

typedef struct{
  int year;
  int month;
  int day;
  int hour;
  int min;
  int sec;
  int ms;
} TIME_INFO;

// LOG情報構造体
typedef struct{
  TIME_INFO time; // 日時時間
  char code; // 識別コード
  char data[MAX_LOG_DATA_LEN]; // LOG情報
} LOG_INFO;

上記、構造体を
CxxxDlgクラスのメンバ変数として以下のように定義するとスタックオーバーフローしま
す。
LOG_INFO m_FileLog[MAX_LOG_DATA_NUM];
そのため、
CArray、std::vectorを用いるべきだと思うのですが、
過去ログなど色々検索したのですが
二つの使い方がわかりません。
だれかご教授おねがいします。

512MのSRAMの内容をまるごとコピーしたファイルを
リードし、リードした値(ASCII)を変換し構造体に格納したいです。
日時時間(15byte)、識別コード(2byte)は固定長ですが、
LOG情報は2~90byteぐらいの可変長です。
そのため、
読み出したログ数は可変になります。
ファイルは512Mbyteのリングバッファとなっております。

また、このm_FileLogはCxxxDlgクラス内の色々な関数の中でアクセスしたいため
メンバ変数としたいのです。
どのようにするのが最適でしょうか?


引用未解決
トピックタグ
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

ナニがわからんのかわかりません。

> 512MのSRAMの内容をまるごとコピーしたファイルを
> リードし、リードした値(ASCII)を変換し構造体に格納したいです。
> 日時時間(15byte)、識別コード(2byte)は固定長ですが、
> LOG情報は2~90byteぐらいの可変長です。
> そのため、読み出したログ数は可変になります。
> ファイルは512Mbyteのリングバッファとなっております。

で?

> また、このm_FileLogはCxxxDlgクラス内の色々な関数の中でアクセスしたいため
> メンバ変数としたいのです。

??? すればいい。


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

> http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200605/06050026.txt
このスレが未解決ですが今回のスレはその続きですか?


返信引用
KENBO
 KENBO
(@KENBO)
ゲスト
結合: 19年前
投稿: 55
Topic starter  

>このスレが未解決ですが今回のスレはその続きですか?
続きです。
タイトル自体の問題は解決したので
別スレたてました。


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

> 続きです。
> タイトル自体の問題は解決したので
> 別スレたてました。

結果どうなって解決したのかちゃんと返事しておいたほうがいいですよ。
別スレたて多目的もね。

あと忘れずに、
>←解決時は質問者本人がここをチェックしてください


返信引用
KENBO
 KENBO
(@KENBO)
ゲスト
結合: 19年前
投稿: 55
Topic starter  

>結果どうなって解決したのかちゃんと返事しておいたほうがいいですよ。
>別スレたて多目的もね。
もちろんわかってます。

タイトルの【プログラムが死ぬ・・・】理由はわかりました。
これで本来解決とするのでしょうが、
みなさんが色々な方法を教えてくださったので。
でもどう使えばいいかわからなくて。。。
だから、解決とは言えないかな!?
と、思いまして。


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

了解しました。

> タイトルの【プログラムが死ぬ・・・】理由はわかりました。
> これで本来解決とするのでしょうが、
> みなさんが色々な方法を教えてくださったので。
> でもどう使えばいいかわからなくて。。。
> だから、解決とは言えないかな!?
> と、思いまして。

この内容を「【プログラムが死ぬ・・・】」
のスレに返事しておいたほうがいいと思いました。


返信引用
KENBO
 KENBO
(@KENBO)
ゲスト
結合: 19年前
投稿: 55
Topic starter  

>ナニがわからんのかわかりません。

定義の記述の仕方、実際使用する時の記述の仕方がわかりません。


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

>ナニがわからんのかわかりません。
僕が分らないのは、
1. 512MBのSRAMは何ですか。
2. 
 >ファイルは512Mbyteのリングバッファとなっております。
 リングバッファにする必要性は何ですか。

>CArray、std::vectorを用いるべきだと思うのですが、
>過去ログなど色々検索したのですが
>二つの使い方がわかりません。
MFCで使うか「CArray」、C++のテンプレートを使うか「std::vector」の違いだと思います。


返信引用
KING・王
 KING・王
(@KING・王)
ゲスト
結合: 20年前
投稿: 122
 

> 定義の記述の仕方、実際使用する時の記述の仕方がわかりません。

「CArray」や「std::vector」という単語まで分かっているなら、
とりあえずGoogleで検索しましょう。

「CArray」でGoogleで検索した結果の1番目のページでもわかりやすそうです。
> http://www.page.sannet.ne.jp/mtoga/lang/cv/bih-m_80.htm

「std::vector」に関して
> http://www.s34.co.jp/cpptechdoc/
のReferencesのSTL samplesをたどっていけば、サンプルがみつかります。


返信引用
KING・王
 KING・王
(@KING・王)
ゲスト
結合: 20年前
投稿: 122
 

> 定義の記述の仕方、実際使用する時の記述の仕方がわかりません。

元スレ( http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?
print+200605/06050026.txt)で、
Blueさんが、参考サイトを紹介済みだった。。。

というか、検索しましょうということまで、指摘済み。。。orz

#余計なお世話かもしれなませんが、スレ主さんは、頂いたレスをちゃんと見ているのだろう
か。。。


返信引用
KENBO
 KENBO
(@KENBO)
ゲスト
結合: 19年前
投稿: 55
Topic starter  

>とりあえずGoogleで検索しましょう。
いちおGoogleで検索はして色々見てみたのですが・・・

サンプルありがとうございます。
調べてみます。


返信引用
と
 と
(@と)
ゲスト
結合: 20年前
投稿: 33
 

定義の記述の仕方

public:
CArray<LOG_INFO, LOG_INFO> m_FileLog;
あるいは
std::vector<LOG_INFO> m_FileLog;

実際使用する時の記述の仕方

m_FileLog.Add(LOG_INFOのデータ); // CArrayの場合

m_FileLog.push_back(LOG_INFOのデータ); // vectorの場合


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

> CArray、std::vectorを用いるべきだと思うのですが、
512MBの固定長として考えれば普通の変数をnewする方法
でもいいとおもいますが....
# 512MBの変数領域を確保するなら、本体に搭載するメモリ容量もそれに似合った
量必要だと思います。
# そのアプリケーションが動くたびにWindows全体の動作が遅くなる、関係ない他の
 ソフトが例外を起こしてハングアップする、といったことが起こるかもしれません。


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

思うにC++言語の勉強自体をもっとされたほうが良いと思います。
使い方にしてもMSDNを調べるとかすれば、簡単な使用例は出ています。
テンプレートクラスの使い方がわからないのであれば、
それこそC++言語レベルの話なのでC++言語の本で勉強すべきでしょう。

あと、今のPCのリソースがいくらリッチになったといっても
他のアプリケーションの動作に影響が出るほど大きなメモリを確保するのは
どうかと思います。そのアプリを動かしている間は他のアプリは動かせませんで
済むのであれば良いでしょうが、通常、これを許してくれるユーザーはあまりいません。
そのアプリ専用マシンというならわからなくもないですけれど。
普通ならどうしても必要なメモリで抑えて動作環境に対する要求を下げる方向で
考えると思います。ログであれば、なにも全レコードをメモリに持つ必要もないと
思いますし。全レコードを一度に画面上に表示するのは事実上不可能でしょうし。
(スクロール等が必要になるくらいの量でしょうと言う意味です)


返信引用
固定ページ 1 / 4

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました