realloc的问题~~~~
大家帮忙看看,为什么我一执行到realloc函数时就会报异常?
char* ff;
char* fb;
int MAX_LEN = 1000;
ff = (char*)malloc( MAX_LEN );
fb = ff;
if( ( fp = fopen( "aa.eml", "r" ) ) == NULL )
{
printf( "文件打开出错!\n" );
}
flen = 0;
*ff = fgetc( fp );
while( *ff != EOF )
{
flen++;
if( flen == 999*n )
{
fb = (char*)realloc( fb, MAX_LEN+1000*n ); //这里异常
ff = fb + 999*n;
n++;
}
ff++;
*ff = fgetc( fp );
if( *ff == 0x0a ) //
{ // 这2个if不
*ff = 0x0d; //加的话,上面
} //realloc函数
if( *ff == 0x0d ) //就不出现异常.
{ //
ff++; //
*ff = 0x0a; //
} //
}
问题点数:100、回复次数:6Top
1 楼DentistryDoctor(不在无聊中无奈,就在沉默中变态)回复于 2005-08-04 08:58:58 得分 0
n=?
Top
2 楼dirdirdir3(风)回复于 2005-08-04 09:05:55 得分 0
会不会是当ff是最后一个的时候,刚好==0x0a的话就会出现ff指针溢出了。Top
3 楼VCSQLVB(深谷清音(谁知还是难脱俗尘))回复于 2005-08-04 09:09:35 得分 0
n初始了吗?不然会很大的。Top
4 楼vcmute(BCare4 H1Rest Good9!)回复于 2005-08-04 09:18:29 得分 0
ff++; 的时候应该也加 flen++;
加后同时判断if( flen == 999*n )..
Top
5 楼newbiestar()回复于 2005-08-04 09:39:42 得分 0
这个代码的问题好多啊……
从while(*ff != EOF)就有问题了,对于char来说EOF还是-1,这样话,就会提前造成文件读取的结束。
另外你没有判断在读取到0x0a,变成0x0d 0x0a时候如果存贮发生在fb[MAX_LEN+n*1000-1]时候造成的越界访问。
并且if( flen == 999*n )这个应该是if (flen == (1000*n -1)),否则你后面写入的时候都会多余一个字节,这个只有在n ==1的时候才拥有正确地语义,否则就是浪费了……Top
6 楼newbiestar()回复于 2005-08-04 09:40:58 得分 0
另外,你的那两个if从语义、语法上面都没有错误,问题不在这里……Top




