我用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。存储函数应该没问题,因为验证过,先从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;
}
解决方案 »
- 有个程服务程序用vs2008(vc)做的,现在想给它加个热键相应功能 在服务的哪里写代码?
- mfc文档和类视图 数据关联问题
- 明天面试,好久没面了,求经验~ 跟上潮流
- 读取磁盘中jpeg格式的图像,并缩放到一定比例的侯有输出到磁盘
- 问一个很简单的问题,我做一个计算器,有0-9这些按钮,想只对应一个响应事件,怎么做?
- 请问如何在MFC工程中加入我自定义的ocx控件(急,在线等)
- 一个Dialog上显示50个小Dialog(FORMVIEW),FORMVIEW需要经常SHOW/HIDE,如何提高刷新的效率?特急,在线等待,多谢!
- 数学编程问题,有点难度,请高手帮忙!!!!(在线等候)
- 谁有UltraEdit9.0的注册码?
- 问一个很菜的问题,大家来看看吧
- 一个关于SetScrollSizes的问题请教高手
- 局部变量调试时提示错误的指针是怎么回事? mfc
{
double *ctemp;
ctrn = (double*)calloc(sizeof(datanum));
return ctemp;
}
ctemp在哪分配空间了?
double* fun2(double *a, uint i)
{
return (double*)calloc(1,sizeof(datanum));
}
大家继续讨论哈
说明:
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;
}
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;
}
最好定义为: saveastxt( double *a, int sizeof_a );