HEAP[R]: HEAP: Free Heap block 393820 modified at 393830 after it was freed
Windows 已在 R测试.exe 中触发一个断点。其原因可能是堆被损坏,这说明 R测试.exe 中或它所加载的任何 DLL 中有 Bug。原因也可能是用户在 R测试.exe 具有焦点时按下了 F12。输出窗口可能提供了更多诊断信息输出窗口可能提供了更多诊断信息。
R测试.exe 中的 0x7c949a63 处最可能的异常: 0xC0000005: 读取位置 0x00000000 时发生访问冲突
程序“[5656] R测试.exe: 本机”已退出,返回值为 1 (0x1)。

解决方案 »

  1.   

    void main()
    {
    float e,*x,*y,*s,*r,*result,*b,*w,**M;
    int k,nx,i,j,p;
    long pos1;
      
    FILE *fp_1;
    FILE *fp_2;
    FILE *fp_m;   x=(float *)malloc(NT*sizeof(float));
       y=(float *)malloc(NT*sizeof(float));
       s=(float *)malloc(LF*sizeof(float));
       r=(float *)malloc((NT+LF-1)*sizeof(float));
       result=(float *)malloc(NT*sizeof(float));     M=new float*[LF];                             
         for(i=0;i<NT+LF-1;i++)
         M[i]=new float[LF];    if((fp_1=fopen("model.dat","rb"))==NULL)
    {
    printf("can not open file model\n");
        exit(1);
    }   if((fp_2=fopen("mod.OUT","rb"))==NULL)
    {
    printf("can not open file mod\n");
        exit(1);
    }
        
       if((fp_m=fopen("result.OUT","wb"))==NULL)
    {
    printf("can not open file result\n");
        exit(1);
    }
      
       
    for(nx=0;nx<NX;nx++)
       { for(k=0;k<LF;k++)
         s[k]=0;                                  for(k=0;k<NT;k++)
         x[k]=0; for(k=0;k<NT;k++)
        y[k]=0;    for(k=0;k<NT;k++)
        result[k]=0; for(i=0;i<NT+LF-1;i++)
    for(j=0;j<LF;j++)
        M[i][j]=0;    pos1=nx*NT*sizeof(float);
     
    fseek(fp_1,pos1,SEEK_SET);
        fread(x,sizeof(float),NT,fp_1);    fseek(fp_2,pos1,SEEK_SET);
    fread(y,sizeof(float),NT,fp_2);    for(j=0;j<LF;j++)
    {
    p=0;
    for(i=j;i<NT;i++)
    M[i][j]=x[p++];  
    }                       
    s[0]=1;
    for(i=0;i<NT+LF-1;i++)
    {
    for(j=0;j<LF;j++)
    r[i]=M[i][j]*s[j];
    }    for(i=0;i<NT;i++)
        result[i]=r[i]; for(i=0;i<NT;i++)
            result[i]=y[i]-result[i];    fwrite(result,sizeof(float),NT,fp_m);    printf("----->%d\n",nx);    } free(x);
    free(y);
        free(b);
    free(s);
    free(r);
    free(result);
        fclose(fp_1);
    fclose(fp_2); for(i=0;i<NT;i++)
             delete []M[i];}
      

  2.   


    好像是指向这里  if((fp_1=fopen("model.dat","rb"))==NULL)
      

  3.   

    b是干嘛的?
    没分配就free了?
      

  4.   

    //内存泄露严重哦,
    if((fp_1=fopen("model.dat","rb"))==NULL) 
    {
    printf("can not open file model\n"); 
    exit(1);  //文件不存在,则强行退出,则前面所有分配的内存都没有释放啊。
    }
      

  5.   

    exit(1) 之前,要先释放所有内存。