【发布时间】:2019-11-10 19:34:42
【问题描述】:
我正在尝试在 amazon linux ec2 实例上运行我的 c++ 程序,并在一段在 MacOS 和 Ubuntu 上运行良好的代码中出现分段错误。代码摘录是这样的
vector<unsigned char> header(8);
bool bool_byte[8];
unsigned char seg_byte;
int byte_num = 0;
for(int i = 0; i < 32; i++) {
bool_byte[i] = snb[i];
if(i % 8 == 7) {
seg_byte = to_byte(bool_byte);
byte_num = (i + 1)/8;
cout << "byte_num minus one is " << to_string(byte_num - 1) << endl;
cout << "vector size " << to_string(header.size()) << endl;
header[byte_num - 1] = seg_byte;
}
}
我正在将 32 位布尔数组转换为 4 字节的 unsigned char 类型。 seg_byte 这里可能是 '\0',但即使我将 seg_byte 替换为 'a',或者使用 header.reserve(8) 并使用 push_back 而不是数组索引,我仍然会遇到分段错误。我也尝试过使用vector<char> 并转换为char,但仍然出现分段错误。 cout 语句打印此内容。
byte_num minus one is 0
vector size 8
byte_num minus one is 1
vector size 139991841770280
Segmentation fault
如果我编写一个小的 test.cpp 文件,它只运行一个填充 vector<unsigned char> 的 for 循环,我不会收到任何错误。
【问题讨论】:
-
bool_byte[i] = snb[i];当i大于 7 时,这行会发生什么? (因为你的循环转到 31) -
非常感谢,愚蠢的错误
标签: c++ linux vector segmentation-fault