[万能解决问题]MATLAB has encountered an internal problem and needs to close.

1.错误的描述及解决办法

使用Matlab和C++混合编程时,即编写完mex文件,调用时,经常会提示下面的错误:
这里写图片描述

触发上述错误的情况:
1.如果一进入mexFunction函数就报错,即不会命中函数中设置的任何断点,也会报错,那么说明,你忘记了将mex -O 改称为mex -g,并且程序本身也有问题。
2.mex指令编译mex文件时,链接使用的库不对(虽然可以编译成功),,但在使用时也会报错,例如在mexFunction中使用String等其他类型不会报错,一使用Mat对象就会报错,原因是应该使用opencv的release版本的库,却使用了OpenCV的debug版本的库。
3. mex文件在.m文件中调用,第一次运行.m文件不会报错,第二次运行.m文件就会触发mex文件中的错误。
4. 更加离谱的是:mex文件在.m文件中调用,多次运行不会报错。但是,如果在另外一个.m文件中调用含有mex文件的.m文件,则会发生,多次运行另外一个.m文件会触发错误。
5. 或者还存在其他千奇百怪的错误。

那么怎么解决这样的问题呢?
千万不要指望通过调试mex文件的方式来解决。即通过将mex文件通过vs打开,并且通过vs将matlab进程添加进去的方式来跟踪,这样可能一无所获,而且一运行到某个地方就会使得matlab崩溃。
http://cn.mathworks.com/help/matlab/matlab_external/debugging-on-microsoft-windows-platforms.html

解决方法:
Matlab报错,肯定是自己程序的原因。如变量未初始化就使用了,或者野指针,空指针,或者就是除以0等。万能的解决方法,就是产生同Matlab同样的数据,即利用同样的数据,完全在VS中进行调试,VS编译器会给你一个合理的报错解释,而不像Matlab那样

其他

Matlab/C++混合编程时,出现:
Matlab has encountered an internal problem and needs to close.
The unsaved information you were working on may be lost. We are sorry for the inconvenience.
Click End Now to close Matlab now.

….
使用VS2010在mexFuntion.cpp文件中设置断点调试时,有时会报错,有时候又可以通过。就有可能会出现这样的情况:使用mex指令对mexFuntion.cpp编译后,在matlab程序中调用该函数,第一次执行时,程序不报错,当在执行第二次时,就会报错。

报错的原因就是,如:空指针,变量未分配内存而使用….

例如:

vector<int> vec;
vec[0]=1;//error, 未分配内存。
vec[1]=2;
mxArray *ptr=mxGetField(prhs[0],0,'name');
//if ptr==NULL或者0
char *strName=mxArrayToString(ptr);
typedef struct person
{
   int age;
   char name[10];
}Person;
typedef struct man
{
   int sex;
   Person *p;
}Man;

Man* pMan=(Man *)malloc(sizeof(Man));
//use pMan
pMan->p->age=10;//error,变量age没有分配内存.可以将Man中的成员Person *p改为Person p.

2.在mex.cpp文件的入口函数mexFunction处设置断点,但是程序不跑断点直接出错原因是在mex编译的时候,需要将mex -o改成 mex -g。(有时候改来改去忘了改回来,经常犯这样的错误)。

3.在使用compile.m文件对mex.cpp进行编译的时候,有时候编译能够成功,而且还通过了,但是在进行调试的时候会出现莫名其妙的错误,同上一样也是出现下面的错误:
Matlab has encountered an internal problem and needs to close.

此时,如果不是上面类似的内存泄漏的话,那问题就在于compile.m的编译了。
例如,在compile.m文件中用到了OpenCV的lib,我们采用了带d的:

opencvLibs = ' -lopencv_core249d -lopencv_highgui249d -lopencv_imgproc249d ';

则程序调用plhs[0]=MxArray(mat)时候就会报错,即将mat类型的对象转换为plhs[0]时会报错,但是将plhs[0]=MaxArray(string)时候正常运行,即将string类型的对象转换为plhs[0]时不会报错。然而我将用的OpenCV lib改为:

opencvLibs = ' -lopencv_core249 -lopencv_highgui249 -lopencv_imgproc249 ';

程序正常运行。

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 我不知道具体情况,但这个错误通常是由于Matlab的某个部分出现问题,需要进一步调查才能解决。建议您检查一下Matlab的日志文件以获得更多信息。如果问题仍然存在,您可以尝试重新安装Matlab或联系Matlab的技术支持团队寻求帮助。 ### 回答2: MATLAB是数学软件中的一个强大的工具,但有时你可能会遇到“MATLAB遇到内部错误”的错误消息。这意味着在MATLAB执行期间出现了无法处理的错误,导致程序中止。这可能是由于许多原因引起的,包括MATLAB版本的问题、操作系统的问题、计算机显卡的问题等等。 要解决这个问题,首先要识别出问题出现的原因。你可以尝试重新启动MATLAB软件或者计算机。如果这没有解决问题,你可以尝试调整个别设置,如图形显示设置、并行计算设置等等。你还可以更新MATLAB到最新版本,这将更新和修复可能存在的错误。 如果这些解决方案都没有起作用,你可以尝试使用MATLAB崩溃诊断工具,这可以帮助你确定内部错误的根本原因并提供解决方案。此外,MATLAB有一个有用的支持社区,你可以在这里查找并解决常见问题。 总之,MATLAB遇到内部错误可能意味着许多不同的问题,但你可以采取一系列措施来解决这个问题。为了避免这个问题,你应该经常更新软件并遵循最佳实践和建议,如避免代码中的常见错误和优化代码以提高效率。 ### 回答3: MATLAB遇到内部错误是指在MATLAB的运行过程中遇到了错误,而这些错误往往不能被用户自行解决,需要MATLAB官方的专业技术支持进行解决。这种错误可能来源于MATLAB中的底层代码,包括底层库、二进制文件等,或者是MATLAB的编译器出现了问题。出现这种错误时,MATLAB程序将立即终止,并在命令窗口中显示错误信息。 当MATLAB遇到内部错误时,我们应该按照以下步骤进行处理: 1. 重启MATLAB:重新启动MATLAB程序,有时候会自动清除错误。 2. 升级MATLAB:尝试升级到最新版本,因为MATLAB的新版本往往会修复旧版本中的错误。 3. 寻求官方技术支持:如果以上两种方法都不能解决问题,我们需要向MATLAB官方提供详细的错误报告,以便他们进行诊断和解决问题。 在MATLAB处理大量数据和复杂程序时,经常会遇到内部错误。因此我们需要做好备份和恢复的准备,以防止数据和程序丢失。此外,我们还应该合理地规划程序流程和代码结构,以降低内部错误的风险。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值