none
为了保证打开文件路径正常,使用了locale old_loc = locale::global(locale(""));和 locale::global(old_loc); vc2008下调用后,程序偶尔会出错,通过调用堆栈发现时在 执行locale old_loc = locale::global(locale("")); 调用时,内部出现的异常。 这种情况怎么怎么解决呢? RRS feed

  • 问题

  • Unhandled exception at 0x104aef8c (msvcp90d.dll) in XXX.exe: 0xC0000005: Access violation reading location 0xfdfdfdfd.

    在执行 old_loc = locale::global(locale(""));时出现的异常。

    该异常定位到xlocnum中的第151行

    _Dp = _MAKLOCCHR(_Elem, _Ptr->decimal_point[0], _Lobj._Getcvt());

    其中依次堆栈为:

    xlocale文件中365行: _Locimp::_Makeloc(_Lobj, _Cat, _Ptr, 0);

    locale.cpp文件中95行: _Locimp::_Makewloc(lobj, cat, ptrimp, ptrloc);

    wlocale.cpp文件中48行: ADDFAC(_Tw4, cat, ptrimp, ptrloc);

    不知道提供的信息够不够全,请帮忙解决。

    同时,在另外一个线程中,也使用到了本地化的操作,会不会是两个本地化冲突了。如果是,该如何解决了?

    2012年4月18日 8:42

答案

  • 曾经的朋友,你好!

    我同意你的想法,有可能是另一个线程也在使用某个资源。我建议你在运行程序之前,先停止其他相关的线程。并且清理解决方案,重新运行程序。

    另外,请检查程序代码,确定所有被用到的变量都被初始化。你也可以单步调试程序,以便能发现更多问题。

    希望我的回复对你有所帮助。如果你还有其他问题,请给出相关代码,以便我们能今早发现并解决问题。

    祝你好运!


    Helen Zhao [MSFT]
    MSDN Community Support | Feedback to us

    • 已标记为答案 Helen Zhao 2012年4月25日 2:05
    2012年4月19日 6:11

全部回复

  • 曾经的朋友,你好!

    我同意你的想法,有可能是另一个线程也在使用某个资源。我建议你在运行程序之前,先停止其他相关的线程。并且清理解决方案,重新运行程序。

    另外,请检查程序代码,确定所有被用到的变量都被初始化。你也可以单步调试程序,以便能发现更多问题。

    希望我的回复对你有所帮助。如果你还有其他问题,请给出相关代码,以便我们能今早发现并解决问题。

    祝你好运!


    Helen Zhao [MSFT]
    MSDN Community Support | Feedback to us

    • 已标记为答案 Helen Zhao 2012年4月25日 2:05
    2012年4月19日 6:11
  • 非常感谢,确实是本地化操作不能交叉使用,我有两个线程都用到了本地化操作,所以导致了异常。
    2012年6月8日 2:11