For starters, why don't you consider writing an overload for operator>>. I suspect that the stream is invalid after you check it but before you have read in a whole object. The half filled element would then be the 11th entry. Maybe your file has a blank line at the end...
// helper function
void get(istream& s, std::string& str)
// check for a failed stream in the middle of reading a
// record: Maybe you can throw an exception or something
// here that you can catch in some outer while loop
if ( s.fail() ) // throw Some_Exception();
istream& operator>>(istream& s, DATA& d)
// much code excluded...
DATA* data = new DATA();
// catch your exception here