int *ptr = malloc~
while (fscanf(fp, "%d", ptr++) != EOF)
;
Предполагая, что для ptr выделено достаточно памяти, что означает значение, хранящееся в *ptr, когда функция вызывает EOF? Я попытался использовать инструменты отладки в Visual Studio и обнаружил, что значение *ptr равно -33686019. Это мусорное значение? или ЭОФ?
scanf
(или его родственники) хранят что-нибудь? Если вы получаетеEOF
(или ноль!), то вы просто не можете предположить, что сохранено действительное значение. - person Some programmer dude   schedule 27.03.2017ptr++
в качестве аргумента, помните, что вы теряете исходный указатель. После того, как вы выполнитеptr++
, вы больше не сможете вызыватьfree
, передаваяptr
, и позиция, в которой хранятся возможные данные, будет потеряна. - person Some programmer dude   schedule 27.03.2017while (fscanf(fp, "%d", ptr++) == 1 && ptr < end) ;
(гдеend
— это значение, назначенное изначальноptr
, плюс количество выделенныхint
). Вам также необходимо сохранить значениеptr
для последующего использования — если не для чего-то другого, то дляfree()
. - person Jonathan Leffler   schedule 27.03.2017