usxr
@usxr

Почему в моем коде портится содержимое переменных?

Вложенная функция fopen_s принимает указатели в параметрах функции, после чего коверкает преданные указатели и обрабатывает.

Код функции.
int fileRead ( char *file_name )
{
	FILE *stream;

	if ( fopen_s ( &stream, file_name, "r" ) != 0 )
		return ENOENT;

	char buffer[char_buffer_size];
	while ( ( fgets ( buffer, char_buffer_size, stream ) ) != NULL )
		printf ( "\n%s", buffer );

	if ( fclose ( stream ) != 0 )
		return ENOENT;

	return 0;
}

Запуск функции с ошибкой.
if ( fileRead ( file_name ) != 0 )
		printf ( "\nОшибка вывода файла." );

Момент запуска функции fileRead.
62842e72bab7b720986106.png

Момент выхода из функции fopen_s.
62842ed69cacb153531610.png

Запуск функции без ошибки.
if ( fileRead ( "ff.routes" ) != 0 )
		printf ( "\nОшибка вывода файла." );

Момент запуска функции fileRead.
628430f3e69da920603364.png

Момент выхода из функции fopen_s.
628431901c248512867074.png
  • Вопрос задан
  • 110 просмотров
Решения вопроса 1
wataru
@wataru
Разработчик на С++, экс-олимпиадник.
Проблема в переменной file_name, а в не функции. Судя по адресу, она на стеке. Причем на месте где-то в середине лакальной переменной buffer.

Это значит, что вы из какой-то функции раньше вернули указатель на локальную переменную и получили висячий указатель.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы