0

.h ファイルでベクトルを宣言します。

typedef std::vector<bool> bit_vector;
bit_vector decoded_lcw_vec;

.cc ファイルでは、次のようにベクターを埋めます。

 bit_vector decoded_lcw_vec(corrected_array, corrected_array + sizeof corrected_array / sizeof corrected_array[0]) ; 

正しい値が含まれています:

printf( "\n\n Decode LDU1 LCW Vector Complete:");
for(int i = 0 ; i < 72; i++ )  cout << decoded_lcw_vec[i];    

与えます:

Decode LDU1 LCW Vector Complete:000000000000000000000000000000000000111111111111000000000000000000000101

問題は、ベクトルが埋められている関数の外部にあるベクトルにアクセスしようとすると、セグフォルトが発生することです。どのようにベクトルにアクセスしようとしても、プログラムは停止します。私はやってみたいです:

uint16_t 
ldu1::lcf() const
    {
    const size_t LCF_BITS[] = {
    0, 1, 2, 3, 4, 5, 6 , 7
    };
const size_t LCF_BITS_SZ = sizeof(LCF_BITS) / sizeof(LCF_BITS[0]);
const uint16_t lcf = extract(decoded_lcw_vec, LCF_BITS, LCF_BITS_SZ);
return lcf;

}

それは障害をセグメント化します。ベクトルにアクセスするために他の多くの方法を試しました。何らかの種類の印刷ステートメントなどを試してみると、プログラム セグメント フォールトが発生します。そのため、どのように実行しようとしても、プログラムが満たされた関数の外部のベクトルにアクセスしようとすると、プログラム セグメント フォールトが発生します。問題は、私が違法アクセス権を作ろうとしているということでしょうか? .h ファイルで vector を private と宣言し、クラスが破棄されていないため、これはどうしてでしょうか?? そのベクトルは、少なくともクラスが破棄されるまで持続するという印象を受けました。

このベクトルがスタック上にあり、呼び出しから制御が戻るまでに範囲外になる可能性はありますか?

4

1 に答える 1