2016-11-21 13 views
-2

を割り当てる:サイズは3687192ときC++ unsigned char型は、私は以下のコードを使用して問題が生じています問題

unsigned char ciphertext[(int)(strlen ((char *)plaintext) * 1.5)]; 

コードが実行にこの行を打つ、それが失敗します。

しかし、それは次の値のために成功します。

だから、
18 
54 
60 
90 
173196 
224100 

、どのように私はこの問題を克服することができますか?

Sidenoteは、unsigned char変数を必要とするOPENSSL暗号化/復号化ルーチン内で使用する必要があるため、unsigned char VARNAMEの形式をとっていなければなりません。

ありがとうございます。

+3

。 'new char [size];'を使って動的に割り当てるか 'std :: string'を使います。 – Barmar

+2

VLAは標準のC++ではありません。 –

+3

@Barmar 'std :: vector 'はこの場合にはさらに良く機能します。 –

答えて

1

答えはすべてコメントにありますが、明示するようにします。

通常、ローカル変数はスタックに割り当てられます。スタックには制限がありますが、無限大には成長できません。制限に達すると、ヒープに変数を代入する以外に選択肢はありません。

あなたはこれを行う方法について多くの選択肢がありますが、2つをお勧めします。最初はstd::vectorある:

std::vector<unsigned char> ciphertext(strlen ((char *)plaintext) * 3/2, 0); 

&ciphertext[0]を使用し、別の関数にこの配列を渡します。

目はstd::unique_ptrです:あなたは、スタックフレームのサイズに制限に実行している

std::unique_ptr<unsigned char> ciphertext = new unsigned char[strlen ((char *)plaintext) * 3/2]; 
関連する問題