【发布时间】:2023-03-04 02:47:01
【问题描述】:
我正在将一个程序从 matlab 代码转换为 C++,我必须在 Linux 上使用 opencv 库(gcc 版本 4.9.2)
所以我正在尝试翻译这行matlab代码:
repeatedMat = repmat(originalMat,[1 1 k]);
我最后写的代码是这样的:
void repeat(cv::Mat img, std::vector <cv::Mat> &output, uint32_t nx, uint32_t ny, uint32_t z)
{
cv::Mat tmpMat = cv::repeat(img, nx, ny);
output = std::vector <Mat> (z);
for (uint32_t i = 0; i < output.size(); i++)
output.insert(output.end(), tmpMat);
}
问题是我总是遇到 std::bad_alloc 错误
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc
Aborted
我不知道确切原因,但我正在考虑一些内存泄漏.. 有没有更好的(和有效的)方法来做到这一点?
【问题讨论】:
-
你所有的代码都应该减少到
vector <Mat> output(z, img); -
除此之外,如果你想在
vector的末尾添加一个元素,你应该使用push_back方法。 -
每次循环迭代,
output向量都会增长,所以循环永远到达终点......直到程序内存不足。跨度>