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 文件中声明了向量私有并且类没有被破坏,这怎么可能?该向量应该,至少我的印象是它会持续到类被销毁。

这个向量是否可能在堆栈上,因此在控制从调用返回时超出范围?

4

1 回答 1

3

问题似乎是您在函数中声明了一个同名的新变量。这个变量作用域是函数,在函数结束时被销毁。如果您希望它成为班级成员,请更改此行:

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

至:

decoded_lcw_vec = bit_vector(corrected_array, corrected_array + sizeof corrected_array / sizeof corrected_array[0]);
于 2013-12-11T19:33:37.203 回答