求大神帮忙 vs2010中0x775a71b4 处有未经处理的错误: 0xC0000005: Access violation

求大神帮忙 vs2010中0x775a71b4 处有未经处理的异常: 0xC0000005: Access violation
CRect rect;

float a[2000];
int i;
int j;
CString str;

 FILE *file;


file =fopen("F:\\data2.txt","r");
 for(i=0;i<2000;i++)

fscanf(file,"%f,",&a[i]);
 }

//倒序的实现
  int M =2048;
  int NV2=M/2;
          int NM1=M-1;
          int I,J,K=0;
  float T;
  I=J=1;
  while(I<=NM1)
{
        if(I<J)
   {
            T = a[J-1];//将A[J-1]的内容和A[I-1]的内容互换,借助于中间变量T
            a[J-1]=a[I-1];
            a[I-1]=T;
                           }
            K=NV2;
             while(K<J)
         {
            J-=K;
            K/=2;
                           }
            J+=K;
            I++;
}

  //FFT
  Complex U,W,V,B[2050];
         int LE,LE1,IP;
         int N=(int)pow(2,float (11));
{  for(i=0;i<2000;i++)
  B[i].Re =a[i];
      B[i].Im =0.0;
 }


float L=1;
while(L<=11)
{
   LE=(int)pow(2,L);
   LE1=LE/2;
   U.Re=1.0f;
   U.Im=0.0f;
   W.Re=(float)cos(PI/(1.0*LE1));//计算W算子的值
   W.Im=(float)-1.0*sin(PI/(1.0*LE1));
   if(abs(W.Re)<1.0e-12)
      W.Re=0.0f;
   if(abs(W.Im)<1.0e-12)
      W.Im=0.0f;
      J=1;
      while(J<=LE1)
     {
           I=J;
           while(I<=N)
        {
          IP=I+LE1;
          V.Re=(float)B[IP-1].Re*U.Re-B[IP-1].Im*U.Im;//计算复数运算A*U
          V.Im=(float)B[IP-1].Re*U.Im+B[IP-1].Im*U.Re;
          B[IP-1].Re=(float)B[I-1].Re-V.Re;//计算复数运算A-T
          B[IP-1].Im=(float)B[I-1].Im-V.Im;
          B[I-1].Re+=V.Re;//计算复数运算A+T
          B[I-1].Im+=V.Im;
          I+=LE;
        }
          float temp=U.Re;
          U.Re=(float)U.Re*W.Re-U.Im*W.Im;//计算复数运算U*W
          U.Im=(float)temp*W.Im+U.Im*W.Re;
          J++;
        }
          L++;
        } 

for(j=0;j<2000;j++)
{  dc.MoveTo(B[j].Re,B[j].Im);

  
  dc.LineTo(B[j+1].Re,B[j+1].Im);
  
  }
 

 
fclose(file);  
------解决思路----------------------
单步调试,设置断点来跟踪,一般都是指针操作问题
------解决思路----------------------
判断是否越界访问,可以在数组的最后一个元素之后对应的地址处设置数据读写断点。如果该地址对应其它变量干扰判断,可将数组多声明一个元素,并设置数据读写断点在该多出元素对应的地址上。
#include <time.h>
#include <stdlib.h>
#include <windows.h>
int main() {
    int a,b[11];//本来是b[10],为判断哪句越界,故意声明为b[11]

    srand((unsigned int)time(NULL));//按两次F11,等黄色右箭头指向本行时,调试、新建断点、新建数据断点,地址:&b[10],字节计数:4,确定。
    while (1) {//按F5,会停在下面某句,此时a的值为10,b[10]已经被修改为对应0..4之一。
        b[(a=rand()%11)]=0;
        Sleep(100);
        b[(a=rand()%11)]=1;
        Sleep(100);
        b[(a=rand()%11)]=2;
        Sleep(100);
        b[(a=rand()%11)]=3;
        Sleep(100);
        b[(a=rand()%11)]=4;
        Sleep(100);
    }
    return 0;
}