复制文件,但错误双免费或在C中损坏 [英] Copy file, but error double free or corruption in C
本文介绍了复制文件,但错误双免费或在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屋!
查看全文