| Zobrazit předchozí téma :: Zobrazit následující téma |
| Autor |
Zpráva |
johnnash
Založen: 30. 07. 2007 Příspěvky: 80
|
Zaslal: 26. listopad 2009, 11:37:50 Předmět: |
|
|
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 |
|
 |
Marek

Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 26. listopad 2009, 16:15:14 Předmět: |
|
|
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 |
|
 |
johnnash
Založen: 30. 07. 2007 Příspěvky: 80
|
Zaslal: 26. listopad 2009, 17:06:07 Předmět: |
|
|
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 |
|
 |
JohnyDog

Založen: 17. 08. 2007 Příspěvky: 66
|
Zaslal: 26. listopad 2009, 18:19:19 Předmět: |
|
|
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 ) _________________
 |
|
| Návrat nahoru |
|
 |
johnnash
Založen: 30. 07. 2007 Příspěvky: 80
|
Zaslal: 26. listopad 2009, 19:44:55 Předmět: |
|
|
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 |
|
 |
|
|
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