Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: access violation error (segmentation fault)  (Прочитано 9390 раз)
0 Пользователей и 1 Гость смотрят эту тему.
DaN(DR)
Гость
« : 30-11-2007 14:13 » 

Всем привет!
При выполнении этой программы выдаёт ошибку Access violation (на функции fscanf). Собственно, вопрос: в чем причина?

#include <iostream>
using namespace std;

int main()
{
     char ch;
     FILE * infile = NULL;
     
     infile = fopen("testing.txt", "w");
     fprintf(infile, "\n");
     fprintf(infile, "2007-11-30\n");
     fprintf(infile, "Very valuable information\n");
     fclose(infile);
     infile = fopen("testing.txt", "r");

     if (infile != NULL)
     {
         clearerr(infile);
         fscanf(infile, "%c", ch);
         cout<<ch<<endl;
         fseek(infile, 1, SEEK_CUR);
         ch = fgetc(infile);
         cout<<ch<<endl;
         fclose(infile);
     }
     return EXIT_SUCCESS;
}
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 30-11-2007 14:24 » 

а дебаг уже не рулит ? Улыбаюсь
Код:
         fscanf(infile, "%c", &ch);

надо указатель на char передать, а не значение ch
Записан

DaN(DR)
Гость
« Ответ #2 : 30-11-2007 14:27 » 

Спасибо

P.S. Дебаг только рассказал, в какой строчке ошибка  А черт его знает...
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #3 : 30-11-2007 14:33 » new

DaN(DR), так анализировать надо

(в студии я работаю: )запускаем без точек останова F5 на отладку, ждём косяка.

остановились на строке

    *(char *)pointer = (char)ch;
в файле input.c

у pointer  явно косячное значение - 0xffffffcc ,
смотрим, откуда взят pointer  - выше:
Код:
            if (!suppress) {
                arglistsave = arglist;
                pointer = va_arg(arglist,void *);
            }

ага, значит было передано в параметрах. Смотрим там - ага, был передан не адрес, а значение ch  , причём она у тебя не инициализирована , в дебаге содержит 0xcc - отсюда и 0xffffffcc (знаковый бит размазан в FF)


-----------
ещё alt+F7 , когда  ,в режиме остановки в дебаге - показать стек вызовов
« Последнее редактирование: 30-11-2007 14:36 от Алексей1153++ » Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines