我在 .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 文件中声明了向量私有并且类没有被破坏,这怎么可能?该向量应该,至少我的印象是它会持续到类被销毁。
这个向量是否可能在堆栈上,因此在控制从调用返回时超出范围?