有一个程序,在一台电脑上运行,当退出时会报错,在另外一台电脑上运行不报错。后来发现是msvcrt.dll版本不一致。但是我打包后安装时,这个文件却不能覆盖。请问,有什么办法能把这个文件覆盖掉。或者由什么方法使程序在推出时不报错。报错的程序出错的位置在exit()处,进入到这个函数中,错误的位置在:
  if (1 == _CrtDbgReport(_CRT_ERROR, NULL, 0, NULL, rterrs[tblindx].rterrtxt))
      _CrtDbgBreak();
  
   这个是什么原因。为什么换掉msvcrt.dll就不出错了。

解决方案 »

  1.   

    应该是你程序的问题,退出释放清理内存时估计哪里出错了.
    与msvcrt.dll无关,建议还是仔细检查下自己的程序.
      

  2.   

    我也是这么认为,但是实在找不到在哪里出错的,另外为什么在另外一台电脑上就美誉问题。
    在有问题的电脑上调试程序时,最后是:has exited with code 255 (0xFF).
    在没有问题的电脑上,最后是has exited with code 0 (0x0).
    0是正确的,不知道什么原因。
      

  3.   

    使用静态库不就行了嘛!或者将它放在本程序所在的目录里面也可以啊(vista以前的windows)。
      

  4.   

    判断dll的版本号,如果版本号低用MoveFileEx的MOVEFILE_DELAY_UNTIL_REBOOT,然后提示用户重启
      

  5.   

    如果真是msvcrt.dll的问题(个人认为不太可能),可以把你认为是正确的DLL放到你的程序启动目录下,这样你的程序就可以使用这个DLL,而不会到系统目录中去找了.