В настоящее время я использую функцию fscanf, чтобы проанализировать файл с некоторым символом и точкой плавания. Я подтвердил результаты, распечатав их и проверку памяти с помощью valgrind. Теперь печать правильная, но всегда есть определенно потеря памяти.Функция C fscanf с потерей памяти
Это пример кода:
FILE* table;
table = fopen("table", "r");
double mass;
while (fscanf(table, %lf ", &mass) != EOF){
printf("mass: %lf\n", mass);
}
и Valgrind с --leak-check=full
вариант говорит:
==7104== 513 bytes in 1 blocks are definitely lost in loss record 52 of 62
==7104== at 0x100008EBB: malloc (in /usr/local/Cellar/valgrind/3.11.0/lib/valgrind/vgpreload_memcheck-amd64-darwin.so)
==7104== by 0x1001EF66C: __parsefloat_buf (in /usr/lib/system/libsystem_c.dylib)
==7104== by 0x1001ED9EF: __svfscanf_l (in /usr/lib/system/libsystem_c.dylib)
==7104== by 0x1001E1492: fscanf (in /usr/lib/system/libsystem_c.dylib)
==7104== by 0x100000F3F: main (in ./prtm)
Я думаю, что это проблема формата. Я также пытался использовать %f
и float
, но просто получаю более схожую ошибку. Может ли кто-нибудь сказать мне, что пошло не так?
Вы не закрываем файл. – 2501
Просто для того, чтобы исключить это как возможную причину: вы * сделаете * получите дополнительный отчет о потерях памяти для этого недостающего 'fclose', правильно? (Как следует сообщать в соответствии с http://stackoverflow.com/q/31630583/2564301) И правильно закрывать файл делает * not * заставлять это уходить? – usr2564301
Если вы запустили 'valgrind', и ваш код НЕ выделяет какую-либо память явно, но' valgrind' все еще сообщает, что память используется при выходе, сначала посмотрите на другие вызовы функций, например 'fopen', которые выделяют память для своих собственных использовать. Если вы не выделяете память и не вызываете каких-либо дополнительных функций библиотеки, и у вас все еще есть отчетная память 'valgrind', используемая при выходе, то вероятная причина - это правильные * исключающие * файлы, недоступные в вашей версии' valgrind' для ОС, в которой вы сейчас работаете. Бывает, просто спросите тех, кто работает с mac. –