双重免费或腐败(fasttop)

时间:2016-08-07 02:13:14

标签: c string pointers

此代码从文件中读取一个以空字符结尾的字符串(包含空终止字符串的文件&应该为所需字符串提供索引)。

错误:

*** 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;
      }
}

你能告诉我导致这个问题的指针(&出于什么原因)?

1 个答案:

答案 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}}似乎完全没用,为什么不删除这些演员?