.[ ČeskéHry.cz ].
Detekce neuvolněných bloků
Jdi na stránku Předchozí  1, 2, 3
 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> C / C++
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
johnnash



Založen: 30. 07. 2007
Příspěvky: 80

PříspěvekZaslal: 26. listopad 2009, 11:37:50    Předmět: Odpovědět s citátem

No zkusim to vypreparovat.
Ale predpokladam, ze tim ze zmenim poradi promenych ve tride by asi nemel _CrtCheckMemory() najednou projit bez chyby kdyz mi to predtim nefungovalo.

EDIT: vypada to ze to asi nebude tak jednoduchy vypreparovat kod, protoze je to dost provazany

Tady je ukazka z tridy
kód:

class PatchData
{
private:
   unsigned short size;
   GLuint  vboVerticesID;
   static GLuint vboIndicesID[10];
   static unsigned int *borderIndices;
   unsigned int  numBorderIndices;
private:
       ...
public:
      ...


Pak dulezity kod
kód:

_CrtCheckMemory(); // Tady je vypis cisty

numBorderIndices = 0;

_CrtCheckMemory(); // Informace o poruseni haldy


Pritom pokud dam promennou unsigned int numBorderIndices pred staticke promenne tak dany kod o poruseni haldy ani nepipne.
Takhle to vypada v akci http://www.youtube.com/watch?v=jl3Wvh-y3fI
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Marek



Založen: 28. 07. 2007
Příspěvky: 1782
Bydliště: Velká Morava

PříspěvekZaslal: 26. listopad 2009, 16:15:14    Předmět: Odpovědět s citátem

Chyba stále může být u tebe. (a určitě je)

Provázaný kód je jenom fráze používaná pro špatný kód.

Tohle vypadá na dost jednoduchej příklad, to nemůžeš zkrátit na cca 100 řádků a poslat to celé? Neboj, tady nikdo nemá zájem o kopírování tvého kódu.
_________________
AMD Open Source Graphics Driver Developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
johnnash



Založen: 30. 07. 2007
Příspěvky: 80

PříspěvekZaslal: 26. listopad 2009, 17:06:07    Předmět: Odpovědět s citátem

Tak co reknete na tohle?
http://www.stud.fit.vutbr.cz/~xluner00/screen.png
Pokud to neni uplne z obrazku patrne, tak promenna numBorderIndices(4 bajty) lezi na adrese 0x026DE562, za ni je 4x Fence Memory(0xFD).

Kod numBorderIndices = 0; zapise nulu ale na adresu 0x026DE564 cimz samozrejmne porusi Fence Memory. A ted jsem jeste zjistil, ze problem zrejme bude v 2bajtovem unsigned short size . Pokud definuji jako unsigned int tak Visualko zapise na spravnou adresu a nedojde k poruse haldy.

EDIT: kod v assembleru http://www.stud.fit.vutbr.cz/~xluner00/screen2.png je proste spatne, adresa je spatne vypocitana.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
JohnyDog



Založen: 17. 08. 2007
Příspěvky: 66

PříspěvekZaslal: 26. listopad 2009, 18:19:19    Předmět: Odpovědět s citátem

citace:
EDIT: kod v assembleru http://www.stud.fit.vutbr.cz/~xluner00/screen2.png je proste spatne, adresa je spatne vypocitana.

Tohle je spis otazka zarovnani ? Pokud je prvni short, ten dalsi int se zarovna na 4bajt hranici, a tedy adresa tamte promenne je spravne na +0x0c . Pak uz zbyva jen otazka proc to CrtCheckMemory nebere v potaz (na windows jsem bohuzel nikdy nedebugoval Smile )
_________________
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
johnnash



Založen: 30. 07. 2007
Příspěvky: 80

PříspěvekZaslal: 26. listopad 2009, 19:44:55    Předmět: Odpovědět s citátem

Problem byl skutecne v zarovnani.
V jednom hlavickovem souboru jsem menil zarovnani pres #pragma pack, ale na konci jsem neprovedl navrat do puvodni hodnoty.
Za behu programu se pak lisily velikosti zarovnani od velikosti spocitanych pri staticke analyze.
Pritom by stacilo kdyby si kompilator hlidal poradi vkladanych hlavickovych souboru a propagoval zmenu zarovnani do dalsich.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> C / C++ Časy uváděny v GMT + 1 hodina
Jdi na stránku Předchozí  1, 2, 3
Strana 3 z 3

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna