此代码从文件中读取一个以空字符结尾的字符串(包含空终止字符串的文件&应该为所需字符串提供索引)。
错误:
*** Error in `./main': double free or corruption (fasttop): 0x090a4a80 ***
Aborted
代码:
char *tmp_realloc=NULL;
char *sstring=NULL;
int i=1;
/*Set file pointer to point string*/
fseek(fh,index,SEEK_SET);
sstring=(char*)malloc(sizeof(char));
if(sstring == NULL)
return NULL;
tmp_realloc=sstring;
while( (*(sstring+i-1)=(char)fgetc((FILE*)fh)) != 0x0 ) {
/*reallocate more memory*/
tmp_realloc=(char*)realloc((char*)sstring,++i);
/*if not same address copy old to new & set old to point new*/
if(tmp_realloc != sstring){
strcpy((char*)tmp_realloc,(char*)sstring);
free(sstring);
sstring=tmp_realloc;
}
}
你能告诉我导致这个问题的指针(&出于什么原因)?
答案 0 :(得分:4)
删除部分
/*if not same address copy old to new & set old to point new*/
if(tmp_realloc != sstring){
strcpy((char*)tmp_realloc,(char*)sstring);
free(sstring);
sstring=tmp_realloc;
}
这几乎(类似于memcpy()
将使用strcpy()
而不是realloc()
)tmp_realloc
如果成功,将会为您做什么。而不是那样,插入错误检查,如果没有找到错误,只需将sstring
分配给char*
。
同样将char*
投射到{{1}}似乎完全没用,为什么不删除这些演员?