该内存不能为读。我搜到一个通过MAP文件的方式来确定出错代码行的方法,但试过了不行。

解决方案 »

  1.   

    我也遇到过这中问题,在调试状况下没有出现问题,但release版有某内存不能读有可能是内存缓冲区溢出,检查一下指针的内存分配、释放。 最好是有良好的编程风格,定义一个指针  Cxxx *p = NULL;
          p = new ...;
          
          if(p != NULL)
          {
            ...
          }      delete p; // delete[] p;
          p = NULL;当然还有可能是其他原因, 以上只是个人看法,仅供参考
      

  2.   

    通过弹MessageBox()来确定出错的位置!!比较麻烦,但行之有效!楼主不妨一试!!
      

  3.   

    调试状态下没问题。用大量的t r y{ } c a t c h{ }是否有效?
      

  4.   

    in release configurationProject->Setting->C/C++->Debug Info
    Select Program Database optionand Project->Setting->C/C++->Link
    select Generate debug info and Generate mapfileand rebuild all
      

  5.   

    有一个可能的原因就是用了ASSERT()。
    release版本的程序不会调用ASSERT(),这样,非法的指针就可能逃过你的监视。
      

  6.   

    to phiger(phiger) :你说的还是通过MAP文件吧,我又试了还是不行,你能相信说一下怎么确定出错位置吗?错误提示是:    "0x6bc43cea"指令引用的"0x000001d0"内存。该内存不能为"read"。
        要终止程序,请单击“确定”。
        要调试程序,请单击“取消”。
      

  7.   

    to phiger(phiger) :你说的还是通过MAP文件吧,我又试了还是不行,你能详细说一下怎么确定出错位置吗?错误提示是:    "0x6bc43cea"指令引用的"0x000001d0"内存。该内存不能为"read"。
        要终止程序,请单击“确定”。
        要调试程序,请单击“取消”。
      

  8.   

    这种错误应该是内存越界读取
    你可以注释代码解决
    或是把处理流程写成文本。
    很容易确定错误的
    虽然有些麻烦
    但是我觉得这是对待release版本出错的最好的办法了
      

  9.   

    0x00000000到0x00000fff是NULL指针区~就是防止非法指针的~
    你的程序估计有空指针~~~~~~~
      

  10.   

    对付release版本的办法是在你的程序的流程中将流程的结果输入到一个文件中去,然后查看这个文件就可以了。还有一个办法,就是在产生一个平台,将就过直接显示到这个平台,当然,这种方法值适用于发布前的编译阶段。你试试用AllocConsole()试试,很有意思。不过在调试时不要FreeConsole(),否则你看不到结果。
      

  11.   

    in release configurationProject->Setting->C/C++->Debug Info
    Select Program Database optionand Project->Setting->C/C++->Link
    select Generate debug info and Generate mapfileand rebuild allSet break point in source
    click F5 to debug!!!