Безопасно и предсказуемо ли повторно использовать указатели после освобождения данных, на которые они указывают?
Например:
char* fileNames[] = { "words.txt", "moreWords.txt" };
char** words = NULL;
int* wordsCount = NULL;
for ( i = 0; i < 2; ++i ) {
data = fopen( fileNames[i], "r" );
words = readWords( data );
wordsCount = countWords( words );
free( wordsCount );
for ( j = 0; words[j]; ++j )
free( words[j] );
free( words );
fclose( data );
}
* проверка ошибок пропущена
Я запускаю код, и он запускается (без предупреждений, ошибок или проблем с памятью), но мне интересно, насколько это безопасно и предсказуемо для использования в большинстве сред (особенно в типичной среде Linux)?
Если это не «безопасно и предсказуемо», каков наилучший способ выполнить одни и те же операции над двумя разными файлами, если не считать создания в два раза больше указателей и т. Д.?
РЕДАКТИРОВАТЬ: Я спрашиваю, можно ли повторно использовать указатель переменная после освобождения того, на что он указал. Я понимаю, что вы не должны использовать указатель значение после освобождения.
Предположим, что код работает отлично (он работает как задумано, память освобождается правильно и тому подобное). Я не могу изменить спецификацию. для этого назначения.
Спасибо!