Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> запись в файл, ошибки в функциях 
:(
    Опции темы
Zhenyok
Дата 22.2.2007, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 19.10.2006

Репутация: нет
Всего: нет



подскажите пожалуйста в чем проблема: некорректно работаю функции записи в файл
есть
указатель
Код

gpsm_t_map* pp = NULL;
pp = pvm->my_gpsm_track[real_track]->point_map;

где хранятся данные. Размер структуры  gpsm_t_map равен 48 байт
я ее пытаюсь зиписать в бинарный файл в цикле.

Код

for(int i = 0;i<pvm->my_gpsm_track[real_track]->length;i++)
{
     if((pp->gmt>long_time_s)&&
         pp->gmt<long_time_e)

             WriteFile(cars,(void*)pp,sizeof(gpsm_t_map),num,NULL);
             pp++;
}

иногда падает функция WriteFile, (на некоторых машинах!!!), но пишет четко, размер файла нормальный.
Делаю то же самое, но тока функцией fwrite(...), работает без ошибок, но размер файла не одинаковый, и данные перемешаны, то больше запишет, то меньше.
Делаю методом write класса wxFFile из набора классов технологии wxWidgets, эффект тот же самый что и функцией fwrite.
Подскажите, пожалуйста, что делать
Возмочно некорректно работаю некоторые dll в системе?
PM MAIL   Вверх
Daevaorn
Дата 22.2.2007, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Цитата(Zhenyok @  22.2.2007,  12:27 Найти цитируемый пост)
Возмочно некорректно работаю некоторые dll в системе? 

ищи лучше ошибку у себя в коде
PM MAIL WWW   Вверх
threef
Дата 22.2.2007, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 27.10.2005
Где: Запорожье

Репутация: 9
Всего: 10



Описание структуры gpsm_t_map ?
структуры, куда включена gpsm_t_map ?


Это сообщение отредактировал(а) threef - 22.2.2007, 12:35
PM MAIL   Вверх
Zhenyok
Дата 22.2.2007, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 19.10.2006

Репутация: нет
Всего: нет



LPDWORD num;
PM MAIL   Вверх
threef
Дата 22.2.2007, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 27.10.2005
Где: Запорожье

Репутация: 9
Всего: 10



Ух ты!
DWORD num
WriteFile(...,&num,..)

Неожиданно даже. Ты для переменной не выделил места, функция записывает невесть куда.

Что до fwrite, то посмотри ключи открытия файла. Там необходимо что-то типа "a+b" 
PM MAIL   Вверх
Zhenyok
Дата 22.2.2007, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 19.10.2006

Репутация: нет
Всего: нет



Код

typedef struct{
  gpsm_t_map * point_map;
  long length;
} gpsm_track;


typedef struct{

  long gmt; 
  double phi; 
  double psi; 
  short flags; 
  unsigned char velocity; 
  unsigned char direction; 
  unsigned short height; 
  char satellites_r; 
  char satellites_a; 
  unsigned char acd0; 
  unsigned char acd1; 
  unsigned char acd2; 
  unsigned char acd3; 
  long x;
  long y;
} gpsm_t_map;


Добавлено @ 12:50 
fwrite использую с ключем "w"
а насчет writefile(...), почему она работает на некоторых машинах нормально, а не некоторых напрочь отказывается?!?
PM MAIL   Вверх
threef
Дата 22.2.2007, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 27.10.2005
Где: Запорожье

Репутация: 9
Всего: 10



ключ w для текстовых файлов, запись и чтение - с учетом признака конца строки, который в структуре с двоичной информацией может встретиться где угодно( 1 байт со значением 0). Нужно "wb".

Еще раз, LPDWORD num - это указатель. Если ты его передаешь функции, то она по этому указателю записывает количество прочитанных байт. Указатель не инициализирован, значение не определено, функция записывает невесть куда.
нужно или так, как я написал вверху, или
Код

LPDWORD num = new DWORD;
...
writefile(... num ...);
...
delete num;


Добавлено @ 13:27 
Этого достаточно, чтобы все упало...
Еще проверь, совпадает ли твой length с количеством элементов в (я так понял) динамическом массиве *point_map. Если не поможет, пришли, как ты добавляешь туда элементы.
PM MAIL   Вверх
Zhenyok
Дата 22.2.2007, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 19.10.2006

Репутация: нет
Всего: нет



спасибо!!! дело было с указателем.
Тока почему он на некоторых машинах работает?!? Вот это мне интересно!!!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0454 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.