复制文件,但错误双免费或在C中损坏 [英] Copy file, but error double free or corruption in C

查看:156
本文介绍了复制文件,但错误双免费或在C中损坏的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

  int main(int argc,char ** argv)
{
FILE * fe,* fs;
unsigned char buffer [2048];
int bytesreader;

fe = fopen(argv [1],rb);

fs = fopen(argv [2],wb); ((bytesreader = fread(buffer,1,2048,fe)))
fwrite(buffer,1,bytesreader,fs);


while

fclose(fe);
fclose(fs);
返回0;
}

我的错误是...

  ***检测到glibc *** ./doc2:双重空闲或损坏(上):0x096b7008 *** 

对不起,现在是正确的,但我没有做过。我的失败在哪里?

解决方案

您需要检查fopen()的返回值为0。
$ b

在0上调用fclose()会导致出现错误。



另外,请检查argc以获取有效范围的参数。 / p>

  int main(int argc,char ** argv)
{
FILE * fe,* fs;
unsigned char buffer [2048];
int bytesreader;
$ b $ if(argc!= 3){
fprintf(stderr,usage:%s file1 file2\\\
,argv [0]);
exit(1);
}

fe = fopen(argv [1],rb);
if(fe == 0){
fprintf(stderr,%s:无法打开%s读取\ n,argv [0],argv [1]);
exit(1);
}

fs = fopen(argv [2],wb);
if(fs == 0){
fprintf(stderr,%s:无法打开%s写入\ n,argv [0],argv [2]);
exit(1); ((bytesreader = fread(buffer,1,2048,fe)))
fwrite(buffer,1,bytesreader,fs);


$ b $

fclose(fe);
fclose(fs);
返回0;
}


int main(int argc, char **argv)
{
    FILE *fe, *fs;
    unsigned char buffer[2048]; 
    int bytesreader;

    fe = fopen(argv[1], "rb"); 

    fs = fopen(argv[2], "wb"); 


    while((bytesreader = fread(buffer, 1, 2048, fe)))
       fwrite(buffer, 1, bytesreader, fs);

    fclose(fe);
    fclose(fs);
    return 0;
}

And my error is...

*** glibc detected *** ./doc2: double free or corruption (top): 0x096b7008 ***

Sorry, now is correct, but i dont undertand. Where is my fail?

解决方案

You need to check the return values of fopen() for 0.

Calling fclose() on 0 results in the error you are seeing.

Also, check argc for a valid range of arguments.

int main(int argc, char **argv)
{
    FILE *fe, *fs;
    unsigned char buffer[2048]; 
    int bytesreader;

    if(argc != 3) {
        fprintf(stderr, "usage: %s file1 file2\n", argv[0]);
        exit(1);
    }

    fe = fopen(argv[1], "rb"); 
    if(fe == 0) {
        fprintf(stderr, "%s: Failed to open %s for read\n", argv[0], argv[1]);
        exit(1);
    }

    fs = fopen(argv[2], "wb"); 
    if(fs == 0) {
        fprintf(stderr, "%s: Failed to open %s for write\n", argv[0], argv[2]);
        exit(1);
    }


    while((bytesreader = fread(buffer, 1, 2048, fe)))
       fwrite(buffer, 1, bytesreader, fs);

    fclose(fe);
    fclose(fs);
    return 0;
}

这篇关于复制文件,但错误双免费或在C中损坏的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆