Список форумов Конференция САПР Bentley MicroStation Конференция САПР Bentley MicroStation
www.ustation.ru
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Осторожней с памятью

 
Начать новую тему   Ответить на тему    Список форумов Конференция САПР Bentley MicroStation -> Профессиональное
Предыдущая тема :: Следующая тема  
Автор Сообщение
Leonid
давно здесь сидим


Зарегистрирован: 28.01.2006
Сообщения: 598
Откуда: С.-Петербург

СообщениеДобавлено: Пт Июл 27, 2012 10:21 am    Заголовок сообщения: Осторожней с памятью Ответить с цитатой

На форумах Бентлей и в старой документации часто встречается такой код
Код:
   char* p = mdlSystem_expandCfgVar (EnvironmentVariable);
   if (p)
   {
      //...
      free (p);
   }


Все работает, но до определенного момента...
Если модуль, собранный на компиляторе С++, запустить в микростейшене 8.11 под Windows 7 64bit, то при обращении к free() получаем полнейший вылет... Причем на Windows XP все работает...
Долго не мог понять в чем проблема, потерял кучу времени, пока не разобрался.
Код должен выглядеть так
Код:
   char* p = mdlSystem_expandCfgVar (EnvironmentVariable);
   if (p)
   {
      //...
      mdlSystem_freeCfgVarBuffer (p);
   }


Надеюсь, кому-то этот пост убережет часть нервов и времени Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
beer



Зарегистрирован: 01.02.2006
Сообщения: 215
Откуда: Москва

СообщениеДобавлено: Пн Июл 30, 2012 7:19 am    Заголовок сообщения: Ответить с цитатой

Очень интересно. В принципе логично, но я бы тоже не сразу понял в чем дело
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Leonid
давно здесь сидим


Зарегистрирован: 28.01.2006
Сообщения: 598
Откуда: С.-Петербург

СообщениеДобавлено: Пн Июн 10, 2013 10:15 am    Заголовок сообщения: Ответить с цитатой

Еще подобная ситуация. Вылет в винде 7 х64 если использовать
Код:
mdlCnv_masterUnitsToUors()

в то время когда еще не открыт ни один файл.
Как я понял, правильнее использовать
Код:
mdlCnv_masterToUOR()

который в данной ситуации возвращает ошибку и не вылетает.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Конференция САПР Bentley MicroStation -> Профессиональное Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group