Давайте обсуждать всякие ошибки тут..
У меня при выходе из приложения выходит ошибка. Ну диалоговое окно со знаком "STOP".
Then app closed i have a problem:
[I]Applicaton closed: <appName> Alloc: 305f09600[/I]
Что это значит ?
What does it mean?
Printable View
Давайте обсуждать всякие ошибки тут..
У меня при выходе из приложения выходит ошибка. Ну диалоговое окно со знаком "STOP".
Then app closed i have a problem:
[I]Applicaton closed: <appName> Alloc: 305f09600[/I]
Что это значит ?
What does it mean?
Это утечка памяти.
Эта статья может быть полезна: [url]http://wiki.forum.nokia.com/index.php/Обнаружение_утечек_памяти_с_помощью_HookLogger[/url]
[CODE] TPoint* pointList=new (ELeave) TPoint[numberOfPoints];
CleanupStack::PushL (pointList);
for( int i=0;i< numberOfPoints;i++)
{
/*do somethink this pointList[i]*/
}
fbsGc->DrawPolygon(pointList,numberOfPoints);
CleanupStack::PopAndDestroy(pointList);[/CODE]
Why here popup -42 error ?
If i do not delete pointList, then its OK, but here memorLeak i have. ^_^
Так черт.. Вот короче, странно,но когда я удаляю pointList , то у меня выходит ошибка... Если не удаляю, то утечка мозгов получается.. Что делать ?
[QUOTE=midday;367486][CODE] TPoint* pointList=new (ELeave) TPoint[numberOfPoints];
CleanupStack::PushL (pointList);
for( int i=0;i< numberOfPoints;i++)
{
/*do somethink this pointList[i]*/
}
fbsGc->DrawPolygon(pointList,numberOfPoints);
CleanupStack::PopAndDestroy(pointList);[/CODE]
Why here popup -42 error ?
If i do not delete pointList, then its OK, but here memorLeak i have. ^_^
Так черт.. Вот короче, странно,но когда я удаляю pointList , то у меня выходит ошибка... Если не удаляю, то утечка мозгов получается.. Что делать ?[/QUOTE]
Потому что CleanupStack::PopAndDestroy() извлекает из стека и делает delete, а в данном случае надо [B]delete [][/B].
Используйте RArray какой-нибудь.
[QUOTE=midday;367486][CODE] TPoint* pointList=new (ELeave) TPoint[numberOfPoints];
[COLOR="Red"] CleanupArrayDeletePushL(pointList);[/COLOR]
for( int i=0;i< numberOfPoints;i++)
{
/*do somethink this pointList[i]*/
}
fbsGc->DrawPolygon(pointList,numberOfPoints);
CleanupStack::PopAndDestroy();[/CODE]
[/QUOTE]
Вот так должно быть нормально
Ей, а ты зачто TPoint и new[] делаешь?
CleanupStack "обслуживает" СBase derived классы.
TPoint-у в массиве если нада, то храни в RArray<TPoint> или CArrayFix< TPoint >
если именно для функции DrawPolygon.
DrawPolygon(const TPoint *aPointList .... ) видимо с целью оптимизации добавили.
[QUOTE=ValentinK;367528]CleanupStack "обслуживает" СBase derived классы.[/QUOTE]
Это неверное утверждение. CleanupStack "обслуживает" все, что не удаляется автоматически, т.е. может привести к утечкам памяти.
На счет RArray и CArrayXXX согласен, но использовать обычные массивы тоже никто не запрещает.
Спасибо большое ;-)
Экспириенс повышается постепенно ;)
Ну я привык так )) вот и всё.. Потом перейду на CArray...
[QUOTE=ivey;367532]Это неверное утверждение. CleanupStack "обслуживает" все, что не удаляется автоматически, т.е. может привести к утечкам памяти.
На счет RArray и CArrayXXX согласен, но использовать обычные массивы тоже никто не запрещает.[/QUOTE]
Ну не согласен с тем что ""обслуживает" все, что не удаляется автоматически" это тоже не верно, тк он удаляет корректно примитивные типы, что есть в данном случае, классы с виртуальным деструктором ( аля CBase derived ) и те у кого имеется TCleanupOperation функция.
[QUOTE=midday;367540]Спасибо большое ;-)
Экспириенс повышается постепенно ;)
Ну я привык так )) вот и всё.. Потом перейду на CArray...[/QUOTE]
Мне тоже кажется, что лучше использовать потомка CArrayFix в данном случае...
Про классы для организации коллекций можно почитать тут:
[url]http://wiki.forum.nokia.com/index.php/%D0%9A%D0%BB%D0%B0%D1%81%D1%81%D1%8B_%D0%B4%D0%BB%D1%8F_%D0%BE%D1%80%D0%B3%D0%B0%D0%BD%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BA%D0%BE%D0%BB%D0%BB%D0%B5%D0%BA%D1%86%D0%B8%D0%B9[/url]
[QUOTE=ValentinK;367554]Ну не согласен с тем что ""обслуживает" все, что не удаляется автоматически"[/QUOTE]
Jo Stichbury, "Symbian OS Explained":
[I]Objects that are not otherwise leave-safe should be placed on the
cleanup stack before calling code that may leave.[/I]
[QUOTE=ValentinK;367554]он удаляет корректно примитивные типы, что есть в данном случае, классы с виртуальным деструктором ( аля CBase derived ) и те у кого имеется TCleanupOperation функция.[/QUOTE]
CleanupStack::PushL() имеет 3 варианта:
[code]
CleanupStack::PushL(CBase *aPtr); // a
CleanupStack::PushL(TCleanupItem anItem); // b
CleanupStack::PushL(TAny *aPtr); // c
[/code]
a) это для тех, кто наследуется от CBase и, соответственно, имеет виртуальный деструктор. При уничтожении таких объектов вызывается деструктор;
b) для тех, кто имеет какой-то метод для освобождения ресурсов (Close(), Release(), Delete() и т.д.). Этот метод и будет вызываться;
c) для всех остальных. При их уничтожении просто вызывается User::Free().