我用VC MFC编写了一个MDI程序,其中在doc中对原始数据进行了大量的去噪处理,开辟了很多临时内存(calloc开辟,free释放),还对相关数据进行了存储(c语言存储,用fscanf),但是在debug版本下调试的时候,单步调试,发现存储是一组数据,但是连续运行时,存储的数据却改变了,真是百思不得其解!!!
  说明:
1。存储函数应该没问题,因为验证过,先从txt中读取,再写入,结果一致,所以不该有错;
2。内存的开辟与释放部分,也都很仔细的检查过了,有开辟的就对应的释放掉了。
  只不过有一点,老是存储出错的内存c,我定义的时候是在主函数中定义的(double *c),开辟内存是在在子函数中开辟的(子函数声明如下: double *function(double *a,uint I)),就是在子函数中开辟内存ctemp,然后将相关数据存在ctemp中,然后返回ctemp给c, 
c的定义及调用过程如下:
   void fun1
{
 double *c; c = fun2(double *a, uint I);//a, I 是其他输入变量
 saveastxt(c);//saveastxt()用于将c中数据存储到txt文件
 free(c);
}
double* fun2(double *a, uint i)
{
 double *ctemp;
 ctrn = (double*)calloc(sizeof(datanum));
 return ctemp;
}

解决方案 »

  1.   

    double* fun2(double *a, uint i) 

    double *ctemp; 
    ctrn = (double*)calloc(sizeof(datanum)); 
    return ctemp; 

    ctemp在哪分配空间了?
      

  2.   

    是不是:
    double* fun2(double *a, uint i) 

    return (double*)calloc(1,sizeof(datanum)); 

      

  3.   

    不好意思,那个是我发帖时打错了,应为ctemp
    大家继续讨论哈
      

  4.   

    return (double*)calloc(1,sizeof(datanum))一句中,参数1是干吗的呀?不太懂哦
      

  5.   

    void *calloc( size_t num, size_t size );
      

  6.   

    由于比较着急,发帖时敲错了几个地方,主要是程序伪代码那块,现修正,我的程序调试运行都可以通过,就是数不太对我用VC MFC编写了一个MDI程序,其中在doc中对原始数据进行了大量的去噪处理,开辟了很多临时内存(calloc开辟,free释放),还对相关数据进行了存储(c语言存储,用fscanf),但是在debug版本下调试的时候,单步调试,发现存储是一组数据,但是连续运行时,存储的数据却改变了,真是百思不得其解!!! 
      说明: 
    1。存储函数应该没问题,因为验证过,先从txt中读取,再写入,结果一致,所以不该有错; 
    2。内存的开辟与释放部分,也都很仔细的检查过了,有开辟的就对应的释放掉了。 
      只不过有一点,老是存储出错的内存c,我定义的时候是在主函数中定义的(double *c),开辟内存是在在子函数中开辟的(子函数声明如下: double *function(double *a,uint I)),就是在子函数中开辟内存ctemp,然后将相关数据存在ctemp中,然后返回ctemp给c, 
    c的定义及调用过程如下: 
      void fun1 

    double *c; c = fun2(double *a, uint I);//a, I 是其他输入变量 
    saveastxt(c);//saveastxt()用于将c中数据存储到txt文件 
    free(c); 

    double* fun2(double *a, uint i) 

    double *ctemp; 
    ctemp = (double*)calloc(datanum, sizeof(double)); //datanum是数据的个数
    return ctemp; 
      

  7.   

    FT, 费了很大劲才知道你讲什么!
    void fun1( double *a, UINT I)
    {// 假设你的数据存在指针a中,其长度为I
        double *c; 
        c = fun2( a, I );//a, I 是其他输入变量 
         saveastxt(c);//saveastxt()用于将c中数据存储到txt文件 
         free(c); 
    }
    double* fun2(double *a, uint i) 
    {
         ASSERT( NULL != a && 0 != i );
         double *ctemp = malloc( sizeof( double ) * i );
         // Or:
         //  double *ctemp = calloc( i, sizeof( double ) );
         ASSERT( NULL != ctemp );
         
         memcpy( ctemp, a, i * sizeof ( double );
         return ctemp;

      

  8.   

    还有,你写的saveastxt( double *a ); 函数也有问题,除非a的长度不变。
    最好定义为: saveastxt( double *a, int sizeof_a );
      

  9.   

    看saveastxt里是不是有内存越界。
      

  10.   

    一般来说都是内存越界的问题这种情况还常见于DEBUG版本和RELEASE版本不一致DEBUG不报错,RELEASE就报错