我的这个程序compiler没错,调试时报错:Unhandled exception at 0x004114d3 in XXXX.exe, access violation reading location on 0x0000002c. 有没有战友碰到过类似的问题,你们是怎么解决得?谢谢

解决方案 »

  1.   

    你编译选项是设置为debug还是release的? 编译生成的exe文件因编译选项的不同而有执行上的差别。用release生成的程序进行了优化,debug它时会导致错误。
    可以参考下面来修改可能导致程序崩溃的代码。 DEBUG和RELEASE   版本差异及调试相关问题:   
      .                   内存分配问题   
        
      1.                     变量未初始化。下面的程序在debug中运行的很好。   
        
                  thing   *   search(thing   *   something)   
                      BOOL   found;   
                      for(int   i   =   0;   i   <   whatever.GetSize();   i++)   
                          {   
                          if(whatever[i]->field   ==   something->field)   
                                {   /*   found   it   */   
                                  found   =   TRUE;   
                                  break;   
                                }   /*   found   it   */   
                            }   
              if(found)   
                                return   whatever[i];   
              else   
                                return   NULL;   
      而在release中却不行,因为debug中会自动给变量初始化found=FALSE,而在release版中则不会。所以尽可能的给变量、类或结构初始化。   
        
      2.                         数据溢出的问题       
        
                      如:char   buffer[10];   
                                int   counter;   
        
                    lstrcpy(buffer,   "abcdefghik");   
        
      在debug版中buffer的NULL覆盖了counter的高位,但是除非counter>16M,什么问题也没有。但是在release版中,counter可能被放在寄存器中,这样NULL就覆盖了buffer下面的空间,可能就是函数的返回地址,这将导致ACCESS   ERROR。   
        
      3.                   DEBUG版和RELEASE版的内存分配方式是不同的   。如果你在DEBUG版中申请       ele   为   6*sizeof(DWORD)=24bytes,实际上分配给你的是32bytes(debug版以32bytes为单位分配),   而在release版,分配给你的就是24bytes(release版以8bytes为单位),所以在debug版中如果你写ele[6],可能不会有什么问题,而在release版中,就有ACCESS   VIOLATE。