在vs2008中引入Armadillo(C++)数学库做测试程序时,0x7c812afb 处未处理的异常
解决时间 2021-02-23 07:14
- 提问者网友:火车头
- 2021-02-22 18:05
在vs2008中引入Armadillo(C++)数学库做测试程序时,编译运行时出现armadilloTest.exe 中的 0x7c812afb 处未处理的异常: Microsoft C++ 异常: 内存位置 0x0012f2a8 处的 std::runtime_error。
程序清单
#include "stdafx.h"
#include
#include"armadillo"
using namespace arma;using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
cout<<"Armadillo version: "<
mat A;
A << 0.165300 << 0.454037 << 0.995795 << 0.124098 << 0.047084 < << 0.688782 << 0.036549 << 0.552848 << 0.937664 << 0.866401 < << 0.348740 << 0.479388 << 0.506228 << 0.145673 << 0.491547 < << 0.148678 << 0.682258 << 0.571154 << 0.874724 << 0.444632 < << 0.245726 << 0.595218 << 0.409327 << 0.367827 << 0.385736 <
A.print("A =");
cout<<"det(A) = "< cout<<"inv(A) = "< double k = 1.23;
mat B = randu(5,5); mat C = randu(5,5);
rowvec r = randu(5); colvec q = randu(5);
cout<<"as_scalar( r*inv(diagmat(B))*q ) = "; cout< cout<<"k*trans(B)*C = "< return 0;}
最佳答案
- 五星知识达人网友:冷風如刀
- 2021-02-22 19:29
Armadillo在计算行列式、做矩阵逆运算时都需要使用lapack库的,直接这样使用就会出现这种错误。
在源代码中定义ARMA_USE_LAPACK,启用LAPACK。也就是要把原先的 #include"armadillo" 改为以下三行:
#define ARMA_USE_LAPACK
#include "armadillo"
#pragma comment(lib, "D:\\armadillo-3.4.4\\examples\\lib_win32\\lapack_win32_MT.lib")
注意ARMA_USE_LAPACK宏一定要在 #include "armadillo" 之前定义,因为Armadillo要针对这个宏做更多处理。
然后连接时需要连接lapack库,这在Armadillo的发行包中可以找到,如本人的目录在D盘上相应目录下,就按如上格式书写。
当然,不使用#pragma指令而修改工程属性的连接选项也可以达到相同的效果。
最后还需要把相应的blas_win32_MT.dll和lapack_win32_MT.dll两个运行库文件复制到运行的exe文件能够找到的地方,比如就在自己工程的Debug目录下和exe文件放在一起就可以。
当然,如果喜欢,直接复制到windows\system32目录下肯定也是可以的。
然后运行,就能得到正确的结果了。
全部回答
- 1楼网友:由着我着迷
- 2021-02-22 20:57
做任务,请原谅
你好!
数据库我不懂,但是鉴于亲的提示是运行错误,那肯定是犯了逻辑错误,需要检查程序的逻辑是否正确,我之前检查逻辑错误的方法就是把程序分成几个小块。然后用笔分别记下他们的作用,然后分别来测试他们是否能完成对应功能。希望能帮助你吧。ps:c最强大的功能就是cout。分分钟把自己运算的结果cout。
我的回答你还满意吗~~
我要举报
大家都在看
推荐资讯