Jak debugovat "Stack around the variable was corrupted"? – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Jak debugovat "Stack around the variable was corrupted"? – C / C++ – Fórum – Programujte.comJak debugovat "Stack around the variable was corrupted"? – C / C++ – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
yaqwsx+9
Posthunter
15. 2. 2011   #1
-
0
-

Mám třídu uloženou v dll. Tuto dll staticky linkuji k exe souboru. Když jej spustím přes debugger Visual Studia, tak vždy na konci programu dostanu chybu "Stack around the variable 'w' was corrupted". w je objekt třídy z knihovny.
Avšak mám problém tuto chybu odstranit. Zdrojáky jsem už pročetl snad 3× a stále zde svou chybu nevidím -např. nikde nepřesahuji indexy polí, nikde nezapisuji do enplatných pointerů....
Jak na tuto chybu přijít? Nemám totiž žádnou představu o tom, jak program debugovat, abych tuto chybu odhalil.

Nahlásit jako SPAM
IP: 85.160.96.–
Life is too short to remove USB mass storage safely...
Správný drsňák udělá z konzole cokoliv
Reklama
Reklama
nervak0
Věrný člen
15. 2. 2011   #2
-
0
-

A jak linkuješ dllku staticky? Je ta dllka/libka binárně kompatibilní? Proč neukážeš ten zdroják?

Vyhazuj kód, dokud nenajdeš kus, který to způsobuje.
Sleduj paměť kolem té proměnné, dokud nezjistíš, co přesně se děje.
Jestli to VS umí, tak ti to hledání usnadní Hardware/Memory breakpoint.

Nahlásit jako SPAM
IP: 213.211.51.–
yaqwsx+9
Posthunter
15. 2. 2011   #3
-
0
-

Linkuji ji pomocí lib souboru a hlavičkového souboru. Binárně je kompatibilní - všechno je zkompilováno ve Visual Studiu, v jenom solution, se stejným nastavením.
Zdroják bych poskytl, kdyby nebyl tak rozsáhlý - je to třída, která obaluje několik rozhraní. Ale zkusím ho nějak sdrcnout a postnu ho sem.
Zatím jsem však pšišel na to, že v kódu chybu nemám - problém je asi v nalinkování knihovny. Protože pokud si uvnitř knihovny vytvořím funkci, v níž provedu stejné úkony jako v exe, tak problém nenastane. Celé se to chová jakokdyby paměť vytvořená v jednom vlákně byla uvolňovaná v jiném - něco podobného se mi vykytlo kdysi u SDL_Mixer.

Nahlásit jako SPAM
IP: 85.160.97.–
Life is too short to remove USB mass storage safely...
Správný drsňák udělá z konzole cokoliv
yaqwsx+9
Posthunter
22. 2. 2011   #4
-
0
-

Po pár dnesch jsme problém vyřešil. Najednou mi při cestě domů hlavou probleskla myšlenka, která byla správná. Přehlédl jsem, že paměť kterou alokuji v knihovně dealokuji v aplikac a naopak. Stačilo toto ošetřit a vše funguje tak, jak má.

Nahlásit jako SPAM
IP: 85.160.108.–
Life is too short to remove USB mass storage safely...
Správný drsňák udělá z konzole cokoliv
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 72 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý