Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
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);
} |
Надеюсь, кому-то этот пост убережет часть нервов и времени |
|
Вернуться к началу |
|
|
beer
Зарегистрирован: 01.02.2006 Сообщения: 215 Откуда: Москва
|
Добавлено: Пн Июл 30, 2012 7:19 am Заголовок сообщения: |
|
|
Очень интересно. В принципе логично, но я бы тоже не сразу понял в чем дело |
|
Вернуться к началу |
|
|
Leonid давно здесь сидим
Зарегистрирован: 28.01.2006 Сообщения: 598 Откуда: С.-Петербург
|
Добавлено: Пн Июн 10, 2013 10:15 am Заголовок сообщения: |
|
|
Еще подобная ситуация. Вылет в винде 7 х64 если использовать
Код: | mdlCnv_masterUnitsToUors() |
в то время когда еще не открыт ни один файл.
Как я понял, правильнее использовать
Код: | mdlCnv_masterToUOR() |
который в данной ситуации возвращает ошибку и не вылетает. |
|
Вернуться к началу |
|
|
|