Креш и Утечка

Обсуждение специальной версии Magic Particles (Dev), предназначенной для разработчиков игр.

Креш и Утечка

Сообщение izimar » Ср сен 19, 2012 2:31 pm

Здравствуйте. При работе с вашей библиотекой для Marmalade были замечены 2 бага:
-1 утечка памяти - для reproduce в приложеном примере надо разкоментировать #define USE_MEMORY
-2 креш - проявляется если не вызывать никкаких Magic API а сразу вызвать Magic_DestroyAll();

п.с. возможно ли будет их пофиксить в ближайшее время?
Вложения
AstralaxTest.zip
(5.97 Кб) Скачиваний: 1807
izimar
 
Сообщения: 14
Зарегистрирован: Ср авг 15, 2012 6:27 pm

Re: Креш и Утечка

Сообщение Odin_KG » Чт сен 20, 2012 2:43 am

Здравствуйте,
-1 утечка памяти - для reproduce в приложеном примере надо разкоментировать #define USE_MEMORY

Действительно удалось найти утечку в библиотеке. Однако по непонятной для меня причине ваш код в Marmalade-е выдает утечку и без Magic Particles. Я закомментировал все обращения на библиотеку, а сообщение об утечке всё равно вылезало. Когда я стал грузить так:
Код: Выделить всё
FILE* file=fopen("matrix.ptc", "rb");
   fseek(file,0,SEEK_END);
   long len=ftell(file);
   fseek(file,0,SEEK_SET);
   char* data=new char[len];
   fread(data,1,len,file);
   fclose(file);
   f = Magic_OpenFileInMemory(data);
   delete []data;

то утечка пропала. Ваш же код на моем компьютере дает утечку всегда, даже если вообще не вызывать Magic Particles ни разу.

-2 креш - проявляется если не вызывать никкаких Magic API а сразу вызвать Magic_DestroyAll();

Поправил.

Библиотеку отправил в личном сообщении.
Аватара пользователя
Odin_KG
Administrator
Administrator
 
Сообщения: 841
Зарегистрирован: Чт янв 15, 2009 2:57 pm

Re: Креш и Утечка

Сообщение Antonz » Вт сен 25, 2012 1:49 pm

Добрый день.

Действительно, в нашем примере была небольшая ошибка - для контейнера buffer необходимо было вызвать clear_optimised() до IwUtilTerminate(), иначе он пытался очистить свою память по выходу из области видимости, то есть после удаления менеджера памяти. Сейчас с новой библиотекой лика не показывает, спасибо.

Исправленный текст примера:

Код: Выделить всё
#include <IwUtil.h>
#include <IwDebug.h>
#include <magic.h>

#define USE_MEMORY
//#define DESTROY_ONLY

//===========================================================================
int main()
{
   IwUtilInit();   // Initializes memory manager.

#ifndef DESTROY_ONLY

#ifndef USE_MEMORY
   HM_FILE f = Magic_OpenFile( "matrix.ptc" );

#else // #ifndef USE_MEMORY
   CIwArray<char> buffer;

   s3eFile* file = s3eFileOpen ( "matrix.ptc", "rb" );
   IwAssert(APP, file);
   int32 fileSize = s3eFileGetSize ( file );
   IwAssert(APP, fileSize > 0);

   buffer.resize (fileSize);
   uint32 readResult = s3eFileRead (& buffer.front(), 1, fileSize, file );
   s3eFileClose(file);

   IwAssert(APP, readResult == fileSize);

   HM_FILE f = Magic_OpenFileInMemory( &buffer.front() );
#endif // #ifndef USE_MEMORY

   if (f)
   {
      Magic_CloseFile(f);
   }

#ifdef USE_MEMORY
   buffer.clear_optimised();
#endif

#endif // #ifndef DESTROY_ONLY

   Magic_DestroyAll();

   IwUtilTerminate();   // Shutdowns memory manager.
   return 0;
}
Antonz
 
Сообщения: 4
Зарегистрирован: Вт сен 25, 2012 1:46 pm

Re: Креш и Утечка

Сообщение Odin_KG » Вт сен 25, 2012 8:59 pm

Здравствуйте,

Действительно, в нашем примере была небольшая ошибка - для контейнера buffer необходимо было вызвать clear_optimised() до IwUtilTerminate()

Понятно

Сейчас с новой библиотекой лика не показывает, спасибо.

Пожалуйста
Аватара пользователя
Odin_KG
Administrator
Administrator
 
Сообщения: 841
Зарегистрирован: Чт янв 15, 2009 2:57 pm


Вернуться в Magic API

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7