У меня возникли проблемы с моим следующим кодом C:Segfault - fclose/Еореп
int main(void){
FILE* infile = fopen("file","r);
FILE* fp = NULL;
unsigned char* buffer = malloc(512);
while(fread(buffer,512,1,infile) > 0){ //reading a file block by block
if(buffer[0] == 0xff){
... //defining variable "name"
if(fp != NULL)fclose(fp);
fp = fopen(name,"w+");
fwrite(buffer,512,1,fp);
} else if(fp != NULL) {
fwrite(buffer,512,1,fp);
}
}
}
кажется, что я не могу FOPEN после fclose, используя тот же указатель, почему? Мне нужен мой указатель, чтобы он оставался доступным повсюду в главном, поэтому я не могу объявить новый в свое время.
EDIT: О, боже, проблема решена. Я, наверное, был очень устал. Я составлял неправильный файл. В любом случае ...
Спасибо, ребята!
Вы не используете «тот же указатель». Вы просто фиксируете возвращаемое значение. Segfault вызван кодом, который вы не разместили здесь. –
Я знаю, что это странно, но если я не освобожу память с помощью flose (fp), sgefault больше не встречается. – superzamp
Пожалуйста, создайте самую маленькую полную программу, которая воссоздает проблему. –