如何在VXL的vnl_matrix内存分配时检测溢出问题?
如何在vnl_matrix内存分配失败时优雅处理而非触发段错误?
我需要在C++代码中实现:当vnl_matrix初始化或调整大小时,若无法分配足够内存,能优雅输出错误信息并终止程序。但目前遇到以下问题:
- 直接构造大型矩阵时会触发段错误,而非给出错误提示:
#include <vnl_matrix.h> #include <iostream> int main () { vnl_matrix<float> B((unsigned)1000000000,6); }
- 使用
set_size方法调整大小时,同样触发段错误,而非返回false:
int main () { vnl_matrix<float> A(3,3); std::cout << "A is " << A.rows() << "x" << A.columns() << std::endl; A.clear(); std::cout << "A is " << A.rows() << "x" << A.columns() << std::endl; bool ok = A.set_size((unsigned)1069350838, 6); if (ok) std::cout << "A is " << A.rows() << "x" << A.columns() << std::endl; else { std::cout << "some error occured" << std::endl; return 1; } A[(unsigned)700000000][5] = 1.0; }
在我的实际代码中,甚至出现set_size返回true但后续写入矩阵元素时触发段错误的情况。运行环境是拥有数百GB内存的机器,上述矩阵仅需约25GB内存。
请问是否有方法可以检查vnl_matrix的内存分配是否真正成功?
内容的提问来源于stack exchange,提问作者highwind
相关产品推荐
相关产品推荐

