版权所有,转载请注明出处。

R6010 -abort() has been called

环境:
  Windows7 旗舰版 64Bit
  Visual studio 2012 编译32Bit运行程序
  Eigen 矩阵库
  GLEW opengl扩展库

问题描述:
  莫名其妙的遇到了R6010错误,通过屏蔽代码最终将问题定义到这个示例程序范围内。当定义了函数opengl_fun()后,应用程序就会链接GLEW.dll库。运行程序,就会在代码:
  CTemp *ptTemp = new CTemp();
  发生崩溃,如下图所示。


  由于是使用了stl的多线程,所以具体的原因很难定位。表面直接原因就是在类CTemp声明中直接使用了 Eigen::Matrix4d mat4d 对象,但是这个类是通过模板实现的,所以让问题的原因更加诡异。

问题结果:
  此外在以下两种情况下并不发生崩溃:
  (1)如果蔽掉opengl_fun()函数,让应用程序不在链接GLEW.dll,那么不在发生崩溃;
  (2)如果不屏蔽opengl_fun()函数,将stl的多线程更改为Windows的原生多线程,也不会出现崩溃。
  所以最终问题的原因可能出现在GLEW.dll库上面,也可能出现在模板或者stl的多线程上,但是却无法解决。后来我只能通过放弃stl的多线程,改用Windows的远程多线程。大家有没有遇到相同类似的问题,可以讨论讨论!

重现代码:

//include:opengl头文件,Eigen模板头文件
//lib : opengl的lib文件
//link : 链接glew32.lib
//dll : 运行时需要glew32.dll #include <stdlib.h>
#include <Eigen/Eigen>
#include <GL/glew.h>
#include <thread> void opengl_fun() //只有当定义了该函数,才会真正链接上glew.dll库
{
GLuint vVbo = 0;
glGenBuffers( 1, &vVbo );
} class CTemp
{
public:
CTemp() {}
~CTemp() {}
private:
Eigen::Matrix4d mat4d;
}; void render_thread_fun( void *pt )
{
CTemp *ptTemp = new CTemp(); //当链接glew32.dll库时,就会出现崩溃错误
} int main(int argc, char* argv[])
{
void *ptT = NULL;
std::thread render_thread = std::thread( render_thread_fun, ptT );
render_thread.join(); return 0;
}

R6010 -abort() has been called的更多相关文章

  1. R6010 - abort() has been called 错误

    今天修改了下程序,发布到服务器上进行测试,结果在测试的时候弹出下面的一个框: 找了N久,发现了原因,差点呗自己弄哭了.. 程序里写了下面这句代码,没有注释掉.

  2. R6010 -abort() has been called错误分析及其解决方法

    近期使用vs2010编程出现下面问题.在网上收集了大家的意见之后,整理了一下 导致出现这种原因有: 1.非法指针訪问和内存泄漏 2.大家再查查吧.一定是指针出现故障了.设置的指针范围跟你执行的不正确 ...

  3. C++实现网格水印之调试笔记(三)—— 初有结果

    错误: error C2338: THE_BRACKET_OPERATOR_IS_ONLY_FOR_VECTORS__USE_THE_PARENTHESIS_OPERATOR_INSTEAD 这种错误 ...

  4. VC++调试错误的解决方案

    这篇文章主要用来记录使用Visual Studio过程中,出现的各种error,并提供自己当时解决的方案.但是,一个error可能由不用原因引起的,文中案例仅供大家参考. nafxcwd.lib(th ...

  5. Basestation函数解析(二)

    ---恢复内容开始--- 这部分从Basestation的RecvDataThread开始,流程为 RecvDataThread->RecvData->Decoder->PostDa ...

  6. 关于MSVCR100.dll、MSVCR100d.dll、Msvcp100.dll、abort()R6010等故障模块排查及解决方法

    一.常见故障介绍 最近在开发相机项目(项目细节由于公司保密就不介绍了),程序运行5个来月以来首次出现msvcr100.dll故障等问题,于是乎开始了分析之路,按照度娘上的一顿操作,期间也是出现了各种不 ...

  7. java.net.SocketException: Software caused connection abort: socket write error

    用Java客户端程序访问Java Web服务器时出错: java.net.SocketException: Software caused connection abort: socket write ...

  8. abort 用法讨论

    同事说:  TT***.factary(  procedure()  begin    ....    abort;    ....  end)大家在TTask中不建议用abort因为难以控制,我测试 ...

  9. delphi中exit,abort,break,continue 的区别

    from:http://www.cnblogs.com/taofengli288/archive/2011/09/05/2167553.html delphi中表示跳出的有break,continue ...

随机推荐

  1. java入门第三步之数据库连接【转】

    数据库连接可以说是学习web最基础的部分,也是非常重要的一部分,今天我们就来介绍下数据库的连接为下面学习真正的web打下基础 java中连接数据库一般有两种方式: 1.ODBC——Open Datab ...

  2. CentOS 常用命令大全(2)

    系统 # uname -a               # 查看内核/操作系统/CPU信息 # head -n 1 /etc/issue   # 查看操作系统版本 # cat /proc/cpuinf ...

  3. SqlServer 慢查询分析优化

    分三步: 记录慢查询的语句到日志文件 1.首先在SSMS,工具菜单下打开Profiler. 2.输入你用户名密码登陆. 3.常规,勾选保存到文件,选择一个文件路径,设置文件大小,这样可以分文件存储日志 ...

  4. web开发-前端到服务器Controller中的数据传递

    一, ajax方式 1. ajax获取页面中的数据,包括表单中的数据, 然后封装成对象,数组, 字符串, 或其他基本类型的数据. 2. 将封装得到的数据通过ajax传递到controller中(注:在 ...

  5. js打印对象(object)

    function printObject(obj){//obj = {"cid":"C0","ctext":"区县"}; ...

  6. Js笔试题之parseInt()和.map()

    parseInt()的几个例子 var b = parseInt("01"); alert("b="+b); var c = parseInt("09 ...

  7. 西天取经第一步——制作自己的HTML5游戏

    废话不说,直入主题:这是一个休闲益智类游戏,与愤怒的小鸟类似采用Box2dWeb引擎.再开发游戏之前,首先我要把Box2dWeb给总结一下方便以后调用 大家可以在http://code.google. ...

  8. 一模 (4) day2

    第一题: 题目大意:二进制数 n mod m 的结果是多少?  n 的长度(二进制数的位数)<=200 000:  m 的长度(二进制数的位数)<=20. 解题过程: 1.我的算法是直接高 ...

  9. select2去除搜索框

    $("#type_select").select2({ minimumResultsForSearch: -1 });

  10. struts中的常量,action配置中的默认值

    1.struts中Action的开发方式 继承ActionSupport类,这种方法实现的Action可以进行数据校验: 实现Action接口: 不继承任何类,不实现任何接口: 是否继承类或实现接口, ...