Исключение при fscanf()
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
Исключение при fscanf() - 2009-07-29 13:59:30.300000
|
|
|
furiousangel
Сообщений: 1116
Оценки: 0
Присоединился: 2005-05-28 06:31:47
|
Вобщем столкнулся с простой задачей, и так и не смог решить ее. Мне нужно значение трех переменные типа float записать в файл с помощью например fprintf() (в любом виде). Да так чтоб потом можно было счиать из файла (например с помощью fscanf() ) и получить те же значения. Я например пробовал вот так: так записывал: <тут получаем значения переменных>
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
Есть предположения ЧЯДНТ?
|
|
|
RE: Исключение при fscanf() - 2009-07-29 14:14:37.313333
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
Ты неправильные параметры в fscanf передаёшь. Почитай книжки / хэлпы.
|
|
|
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",&ctmx,&ctmy,&ctmz);
|
|
|
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'. Даже не знаю что думать.
|
|
|
RE: Исключение при fscanf() - 2009-07-29 15:33:04.070000
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
А ты уверен, что Canvas (си++ билдер, рисование, наверно) имеет какое-то отношение к работе с файлами? И не "не того типа параметры", а бред полный. Ты не понимаешь, что такое указатель, и как передать переменную в функцию, чтобы её можно было менять внутри функции.
|
|
|
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 продефайнены выше. Это реальные адресса, которые в других функциях работают на ура. Суть функции думаю понять несложно. ЗЫ. Ах да. Ни с какой графикой я не работаю здесь вобще.
|
|
|
RE: Исключение при fscanf() - 2009-07-29 16:16:48.696666
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
Скорее всего на ReadProcessMemory :) Если с графикой не работаешь - то откуда канвас взялся?
|
|
|
RE: Исключение при fscanf() - 2009-07-29 16:28:01.023333
|
|
|
furiousangel
Сообщений: 1116
Оценки: 0
Присоединился: 2005-05-28 06:31:47
|
Дело в том, что исключение вылетает именно в месте вызова этой функци а не внутри нее. При чем вылетает абсолютно хаотично. Никогда не угадаешь когда. В остальных местах эта функция IfReach() работает на ура. Дело в том что она вызывается в отдельном потоке. Может это как-то связано с исключением? Потоки по идее друг другу мешать не должны и я не особо заморачивался с их синхронизацией. Может зря? И еще. Для работы моей программе нужны привелегии на отладку. Я их выставил. Вот хочу знать они выставляются процессу вцелом или только потоку? Откуда этот canvas вылез понятия не имею. Моя программа только читает данные из другого процесса и порой пишет туда свои.
|
|
|
RE: Исключение при fscanf() - 2009-07-29 17:56:57.110000
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
Может просто прав на чтение памяти нет (или есть, но не всегда/не везде)? VirtualProtect курил?
|
|
|
RE: Исключение при fscanf() - 2009-07-29 18:25:34.930000
|
|
|
furiousangel
Сообщений: 1116
Оценки: 0
Присоединился: 2005-05-28 06:31:47
|
У меня весь замес на чтении\записи памяти. И почти все происходит из основного потока программы. При чем на ура работает ( Я высталяю привелегии на отладку. Без них чтение работает, но запись нет). Но кое-что приходится как не крути выполнять из паралельного потока. Проверил функцию получения привелегий. Она судя по всему выставляет привелегии процессу вцелом. В особо "опасных" местах поставил свой обработчик исключений, но они продолжают сыпаться непонятно откуда.
|
|
|
|
|