- - PR -
各画像データに識別番号を付加し配列へ格納する方法
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-11-13 20:51
こんばんわ。
画像ファイルを、fread関数を用いて1024Byteずつ画像データを抽出し、各データに対して連番を付加し格納しています。 コンパイラはVC++.NET 2003です。 以下にプログラムを示します。 //パケット格納構造体 struct SPkt{ UINT SeqNum; char SendPkt_Buf[1500]; }SendPkt; int n; char PktBuff[1500] UINT SeqNumber = 0 UINT c = 0; void SendPkt_Buf(UINT SeqNumber, char *PktBuf, int n, int c){ struct SPkt Pkt_Array[100]; Pkt_Array[c].SeqNum = SeqNumber; memmove(Pkt_Array[c].SendPkt_Buf,PktBuf,n); →@ } while((n = fread(PktBuf,1,1024,fp)) != 0) { //連番カウント SeqNumber++; SendPkt_Buf(SeqNumber,PktBuf,n, c); //配列要素カウント c++; } 上記は、SPkt構造体に連番と画像データを格納するというプログラムを構築しました。 しかし、矢印@の場所にブレイクポイントを置き、格納されているか確認したところ、 Pkt_Array[0].SeqNumに1 Pkt_Array[0].SendPkt_Bufに画像データ が格納されるのはよいのですが、 次のフェーズで同様の場所を確認したところ、 Pkt_Array[0].SeqNumに3435973836 Pkt_Array[0].SendPkt_Bufにフフフフフフフフ・・・・・ が格納されてしまいます。 Pkt_Array[0].SeqNum 1 Pkt_Array[1].SeqNum 2 Pkt_Array[3].SeqNum 3 ・ ・ ・ Pkt_Array[0].SendPkt_Buf 画像データ(バイナリファイル) Pkt_Array[1].SendPkt_Buf 画像データ(バイナリファイル) ・ ・ ・ という風に、格納したいのですが・・・ なにか方法はありますでしょうか? よろしくお願いいたします。 | ||||||||||||
|
投稿日時: 2006-11-13 22:04
ローカル変数である、Pkt_Arrayに対して、ごにょごにょやっててもダメじゃね?。 後で、アクセスしたらセグるような気がする。 それとも、C++/CLI?そうは見えないけど。 先に、ちゃんと動的メモリ確保(mallocとか)を勉強した方がいいと思うよ。 | ||||||||||||
|
投稿日時: 2006-11-13 23:21
VS2003 と書いてあるので、Managed C++ ですね、きっと。 SendPkt_Buf が再帰呼び出しされているけど、そんな必要あるのかな?ループで回せばすむ話じゃ? ちげ。when の上で切れてるのか。。。もちっと、わかりやすく書こうよ(×_×;) _________________ Jitta@わんくま同盟 Microsoft MVP for Visual Developer ASP/ASP.NET 2006/10-2007/9 [ メッセージ編集済み 編集者: Jitta 編集日時 2006-11-13 23:22 ] | ||||||||||||
|
投稿日時: 2006-11-14 09:48
書き方がよく無かったですね。 __gcが見当たらないので、マネージ化しているようには見えない(.NETの管理下には置かないモジュール)という方がよかったかな。 | ||||||||||||
|
投稿日時: 2006-11-14 09:59
ですね。 VS2003だけでは、VCの場合マネージドもアンマネージドのプロジェクトが作成できますから、 VS2003=MC++ではないです。 ですので、freebirdさん、 どのプロジェクトでプログラミングしているのかを明記したほうがいいでしょう。 明記例) WindowsXP SP2/Visual Studio 2003 - Win32 Application(MFC(SDI)) | ||||||||||||
|
投稿日時: 2006-11-14 10:26
関数内で宣言されたスタック変数の値が、関数終了後に保持されておらず、再度関数を呼び出したときに不定となるのは、C++の仕様どおりの動作。保持したいならstatic変数にするか、グローバル変数として宣言する必要があります。まずは、C++の文法の基礎をおさらいしてください。特に変数の宣言とスコープに関して・・・・。
#ソースコードを記述するときには、BBコードを使ってください。 #スコープの概念が無い辺り、Perl出身者ですかね? |
1