2011-09-16 18 views
3

このコミュニティと、これまで私がプログラミング問題に抱いていたすべての助けに感謝します。C#バイト配列をC++に変換する

残念ながら、私はこの問題の答えを見つけることができないようであり、一見したところ、思考が簡単ではないようです。 私は現在C++ 6.0を使用しています。ここで

私はC#のから変換しようとしているコードです:次のようにC++で

byte[] Data = new byte[0x200000]; 
uint Length = (uint)Data.Length; 

、私は新しいバイト配列Dataを宣言:

BYTE Data[0x200000]; 
DWORD Length = sizeof(Data)/sizeof(DWORD); 

私は私のプログラムを実行すると、 、私はスタックオーバーフローエラーを受け取ります(図参照)。私はこれが配列が非常に大きい(私が間違っていなければ2 MBの)ためだと信じています。

このサイズの配列をC++ 6.0に実装する方法はありますか?

+1

ヒープの配列をオプションとして宣言していますか?スタックに宣言するのではなく、この配列を新しいものにすることは可能でしょうか? –

答えて

2

現在、スレッドのスタックには通常スタックスペースが数メガバイトに制限されているため、スタックオーバーフローの原因となる多くのメモリが割り当てられています。あなたは(ところで、あなたは間違って配列の長さを計算している)newと、ヒープ上のアレイを作成することができます。

DWORD length = 0x200000; 
BYTE* Data = new BYTE[length]; 

あなたにも、生の配列の代わりにvector<BYTE>を使用する場合があります。

vector<BYTE> Data; 
int length = Data.size(); 
+0

ベクトルを宣言してコンパイルしようとすると、コンパイラは「ベクトルは宣言されていない識別子です」と述べています。私に含める必要があるヘッダーはありますか? – Brandon

+0

@Brandon: '#include 'と 'std :: vector;を使用する –

+1

#include - あなたが自分で助けようとしているわけではありません。スタック対ヒープとSTLについても知らないと、C++とSTLの基礎をカバーする本を買うことで、あなた自身を大いに助けることができるということがわかります。誰もまだ言及していないのは、適切なdelete []構文でその配列を削除する必要があるということです。 – Tod

3

をこの方法で配列を定義すると、スタックオーバーフローで終わるスタックが作成されます。ポインタを使ってヒープ上に非常に大きな配列を作成することができます。例:

BYTE *Data = new BYTE[0x200000]; 
関連する問題