Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Исключение при fscanf()

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> Исключение при fscanf()
Имя
Сообщение << Старые топики   Новые топики >>
Исключение при fscanf() - 2009-07-29 13:59:30.300000   
furiousangel

Сообщений: 1116
Оценки: 0
Присоединился: 2005-05-28 06:31:47
Вобщем столкнулся с простой задачей, и так и не смог решить ее.
Мне нужно значение трех переменные типа float записать в файл с помощью например fprintf() (в любом виде). Да так чтоб потом можно было счиать из файла (например с помощью fscanf() ) и получить те же значения.
Я например пробовал вот так:
так записывал:
&lt;тут получаем значения переменных&gt; FILE* f=fopen(fname,"wb"); fprintf(f,"%f:%f:%f\r\n",ctmx,ctmy,ctmz); fclose(f); так считывал:
FILE* f=fopen(fname,"rb"); fseek(f, 0, SEEK_SET); fscanf(f,"%f:%f:%f\r\n",ctmx,ctmy,ctmz);// вот тут и происходит исключение типа обращение к адрессу 0х00000000 Есть предположения ЧЯДНТ?
Post #: 1
RE: Исключение при fscanf() - 2009-07-29 14:14:37.313333   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Ты неправильные параметры в fscanf передаёшь. Почитай книжки / хэлпы.
Post #: 2
RE: Исключение при fscanf() - 2009-07-29 14:20:34.276666   
L2nkeR

Сообщений: 115
Оценки: 0
Присоединился: 2009-02-02 04:03:17.786666
Конечно срабатывает исключение. Как ты собираешься возвращать значения ctmx, ctmy, etc?
Ты должен методу передать ссылки на переменные
scanf(f,"%f:%f:%f\r\n",&amp;ctmx,&amp;ctmy,&amp;ctmz);
Post #: 3
RE: Исключение при fscanf() - 2009-07-29 14:24:03.963333   
furiousangel

Сообщений: 1116
Оценки: 0
Присоединился: 2005-05-28 06:31:47
Кажется понял. Но только не "неправильные параметры", а параметры не того типа как я понимаю.
UPD:
Да. Пример посмотрел и понял. Но не поверите исключение все-равно вылетает. EInvalidOperation with message 'Canvas doesn't allow drawing'.
Даже не знаю что думать.
Post #: 4
RE: Исключение при fscanf() - 2009-07-29 15:33:04.070000   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
А ты уверен, что Canvas (си++ билдер, рисование, наверно) имеет какое-то отношение к работе с файлами?

И не "не того типа параметры", а бред полный. Ты не понимаешь, что такое указатель, и как передать переменную в функцию, чтобы её можно было менять внутри функции.
Post #: 5
RE: Исключение при fscanf() - 2009-07-29 15:57:46.526666   
furiousangel

Сообщений: 1116
Оценки: 0
Присоединился: 2005-05-28 06:31:47
"Не того типа параметры" это не бред. Ведь float и указатель на float это таки разные типы. И про передачу параметров по значению, по ссылке и по адрессу тоже не вчера узнал.
Сразу не обратил внимание но теперь исключение вываливается на вызов этой функции IfReach():
int IfReached () { int stat; ReadProcessMemory(hproc,(LPCVOID)(BASEADDR+CTM_STATUS),&stat,sizeof(int),NULL); if (stat==0xD) return 1; else return 0; }
Эта самописная. hproc глобальный хендл процесса. нигде не перезаписывается и вобще extern. BASEADDR и CTM_STATUS продефайнены выше. Это реальные адресса, которые в других функциях работают на ура. Суть функции думаю понять несложно.
ЗЫ. Ах да. Ни с какой графикой я не работаю здесь вобще.
Post #: 6
RE: Исключение при fscanf() - 2009-07-29 16:16:48.696666   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Скорее всего на ReadProcessMemory :)

Если с графикой не работаешь - то откуда канвас взялся?
Post #: 7
RE: Исключение при fscanf() - 2009-07-29 16:28:01.023333   
furiousangel

Сообщений: 1116
Оценки: 0
Присоединился: 2005-05-28 06:31:47
Дело в том, что исключение вылетает именно в месте вызова этой функци а не внутри нее. При чем вылетает абсолютно хаотично. Никогда не угадаешь когда.
В остальных местах эта функция IfReach() работает на ура.
Дело в том что она вызывается в отдельном потоке. Может это как-то связано с исключением? Потоки по идее друг другу мешать не должны и я не особо заморачивался с их синхронизацией. Может зря? И еще. Для работы моей программе нужны привелегии на отладку. Я их выставил. Вот хочу знать они выставляются процессу вцелом или только потоку?
Откуда этот canvas вылез понятия не имею. Моя программа только читает данные из другого процесса и порой пишет туда свои.
Post #: 8
RE: Исключение при fscanf() - 2009-07-29 17:56:57.110000   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Может просто прав на чтение памяти нет (или есть, но не всегда/не везде)? VirtualProtect курил?
Post #: 9
RE: Исключение при fscanf() - 2009-07-29 18:25:34.930000   
furiousangel

Сообщений: 1116
Оценки: 0
Присоединился: 2005-05-28 06:31:47
У меня весь замес на чтении\записи памяти. И почти все происходит из основного потока программы. При чем на ура работает ( Я высталяю привелегии на отладку. Без них чтение работает, но запись нет). Но кое-что приходится как не крути выполнять из паралельного потока. Проверил функцию получения привелегий. Она судя по всему выставляет привелегии процессу вцелом.
В особо "опасных" местах поставил свой обработчик исключений, но они продолжают сыпаться непонятно откуда.
Post #: 10
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> Исключение при fscanf()







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.