Я ожидаю, что следующий код будет записывать номер 42 в двоичный файл, а затем читать и распечатывать точное значение. И он делает это, но затем он не выйдет, просто остановится, как ожидая ввода пользователя. Вот код, который делает то, что я объяснил:Программа зависает, если оба написаны и прочитаны из файла в том же самом исполнении
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char argv[]){
char *filename = "test.db";
int *my_int = calloc(1, sizeof(int));
*my_int = 42;
// First we open file to write to it
FILE *file = fopen(filename, "w");
fwrite(my_int, sizeof(int), 1, file);
fflush(file);
free(file);
// Then we want to read from it
*my_int = -1;
file = fopen(filename, "r");
fread(my_int, sizeof(int), 1, file);
free(file);
printf("Read back %d\n", *my_int);
return 0;
}
Я знаю, что я могу просто открыть его с w+
флагом, но я просто любопытно выяснить, почему она просто глохнет ..
'free (file);' - undefined behavior – melpomene
Почему вы используете 'calloc' для выделения' my_int', когда вы тут же перезаписываете '' '' s, где он находится? Возможно, более эффективно использовать 'malloc()', если вы планируете инициализировать его самостоятельно, прежде чем вы его прочитаете. –