运行以下代码时出现分段错误:
void convert_fix2float(vector<int8_t*>& resultin, vector<vector<float>>& resultout, const float* output_scale){
cout<<"entering fix to float"<<endl;
for (size_t ii = 0; ii < 3; ii++) {
size_t width = shapes.outTensorList[ii].width;
size_t height = shapes.outTensorList[ii].height;
size_t channel = shapes.outTensorList[ii].channel;
size_t sizeOut = channel * width * height;
for (size_t j = 0; j < sizeOut; j++){
resultout[ii][j] = resultin[ii][j] * output_scale[ii];
}
}
cout<<"exiting fix to float"<<endl;
}
如果我评论的声明
resultout[ii][j] = resultin[ii][j] * output_scale[ii];
分段故障消失。有人能帮我找出问题的原因吗。
分割失败只是意味着没有准备内存。所以你的元素之一
- 结果
- resultin
- 输出_刻度
无法访问,因为在此位置无法访问有效内存。
std::vector
中的运算符operator[]()
无法创建新元素。要创建新元素,可以使用方法insert()
:
resultout.insert(std::vector<float>())
for (size_t j = 0; j < sizeOut; j++)
{
resultout[ii].insert(resultin[ii][j] * output_scale[ii]);
}