码迷,mamicode.com
首页 > 系统相关 > 详细

项目.多进程SVG

时间:2018-04-30 11:55:53      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:etl   point   specified   window   spec   解决   程序   clr   cep   

遇到的问题:

1、CreateWindowEx(...)返回0,但是 GetLastError() 返回也是0...

  ZC:网上查了,说是 WN_CREATE消息没有正确的返回,会导致这个现象。我这里的情况是:在窗体创建过程中,调用了NULL指针的函数,于是 导致 创建过程报错了(但是 没有使用__try{}__except(...){},程序一点反应都没有,报错信息都没有...)

2、vc2010多线程使用std标准模板库容器DEBUG版迭代器BUG - CSDN博客.html(https://blog.csdn.net/lazyclough/article/details/7547610

在vc2010多线程环境下使用std标准模板库容器 list 时, 如果是DEBUG版本, 迭代器存在BUG

在<list>文件中,以下代码块会出现非法访问错,实际上是在子线程中调用list的begin()方法返回迭代器时更改了  _Pnext 所指内存块的值。
#if _ITERATOR_DEBUG_LEVEL == 2
    void _Orphan_ptr(_Myt& _Cont, _Nodeptr _Ptr) const
        {    // orphan iterators with specified node pointers
        _Lockit _Lock(_LOCK_DEBUG);
        const_iterator **_Pnext = (const_iterator **)_Cont._Getpfirst();
        if (_Pnext != 0)
            while (*_Pnext != 0)
                if ((*_Pnext)->_Ptr == this->_Myhead
                    || _Ptr != 0 && (*_Pnext)->_Ptr != _Ptr)
                    _Pnext = (const_iterator **)(*_Pnext)->_Getpnext();
                else
                    {    // orphan the iterator
                    (*_Pnext)->_Clrcont();
                    *_Pnext = *(const_iterator **)(*_Pnext)->_Getpnext();
                    }
        }
 #endif /* _ITERATOR_DEBUG_LEVEL == 2 */



解决办法,跟踪_ITERATOR_DEBUG_LEVEL 宏定义,打开yvals.h文件,将157行的

#define _HAS_ITERATOR_DEBUGGING 1 改为 #define _HAS_ITERATOR_DEBUGGING 0

  ZC:我跟踪下来,我出错的地方是这里:

      技术分享图片

      技术分享图片

      我跟了一下,貌似 正常的情况是:*_Pnext 是 == 0的,而出错的情况是 (*_Pnext != 0) 。

      我根据帖子的内容,也修改了 原来的源文件,前提是 事先做了备份(C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\yvals - 副本.h),把原来的源文件 也改成了 非只读的状态...

    思考:我的情况里面 没有用到多线程啊,为什么也做这样?

3、

4、

5、

 

项目.多进程SVG

标签:etl   point   specified   window   spec   解决   程序   clr   cep   

原文地址:https://www.cnblogs.com/DrMess/p/8972893.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!