VC6.0 运行时出错
出错提示:Debug Assertion Failed!
Program:F:\kechen\cc作业\debug\ex.exe
File:dbgheap.c
Expression:_CrtIsValidHeapPointer(pUserData)
For information on how your program can cause an assertion
failure,see the Visual C++ document on asserts.
(press Retry to debug the application)
出错的语句在:
for 和 ++--都没有错误的(之前有语句调用,并改变dp1 dp2的指针)
调试设断点在free句
for(i=0;i<SIZE;i++){
free(--dp1);
free(dp1++);
}
dp1,dp2的申请函数:
double * init(){
double * dp;
if((dp=(double *)malloc(SIZE*sizeof(double)))==NULL){
printf("Can\'t malloc!");
}
return dp;
}
刚开始用VC不知是哪出错了……
在TC++3.0生成的EXE文件运行不会出错,
VC生成的EXE文件运行后却出错。。。 dp是在init()里面声明的,于是它在init结束的时候它的生命周期也就结束的,也就是当你返回dp的时候,已经是一个“未定义”的地址。所以你进行free的时候会发生错误。
你应该把dp1在外部定义,然后把init改成void init( double* dp ), 在init里面分配地址空间,把dp1作为参数传递进去。
(根据我看的书的理论分析的结果是这样的,本身没有出现过这种错误,不敢确定对,不过你可以试试) 楼主那个free(--dp1);和free(dp1++)是做什么的?
如果要释放dp1的空间直接free(dp1)就好了 --dp1是因为前面对dp1进行了操作…………
在TC++3.0中没有问题……问题不是dp1-- …… 原帖由 用程序诠释生命 于 2006-6-6 21:20 发表
dp是在init()里面声明的,于是它在init结束的时候它的生命周期也就结束的,也就是当你返回dp的时候,已经是一个“未定义”的地址。所以你进行free的时候会发生错误。
你应该把dp1在外部定义,然后把init改成void ...
应该不是这个问题
页:
[1]