Oprava: Uvolnění paměti několikrát může způsobit chybu aplikace v jazyce C++

Překlady článku Překlady článku
ID článku: 194550 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Příznaky

Paměť uvolněna několikrát může způsobit chybu aplikace.

Poznámka: Toto je PRAVDA, zda použít malloc a více volného nebo nové a odstranit více.

Příčina

Po první volání free() a již ve stavu, kde bude fungovat následných volání free() jsou změněny haldy struktury řízení.

Řešení

Volání více volného vyhnout nebo odstranit více na stejný ukazatel. Jeden způsob, jak tomu zabránit je přiřazením ukazatel null po volání zdarma nebo odstranit. Odstranit a volné funkce vrátit bez způsobem nic, pokud je jako argument předán ukazatele null. To nefunguje v případech, kde volné nebo více ukazatelů směřující do stejného umístění paměti, nazývá odstranit.

Pomoci zákazníkům dochází k tomuto problému v jejich aplikace jiných výrobců, společnost Microsoft vydala nové C Run time knihovny DLL, Msvcrt.dll, která implementuje dvěma správci haldy správce hald kompatibilní Visual C++ 5 a Visual C++ 6 správce kompatibilní haldy. Zjistí s Visual C++ verze aplikace je sestavena a používá správce hald příslušné aplikace. Pokud je tato verze 6.0 nebo vyšší, je používán správce hald kompatibilní Visual C++ 6 a pokud je starší než verze 6.0, Visual C++ 5 kompatibilní haldy použit.

Visual Studio 6.0 uživatelé mohou získat tento nový msvcrt.dll nainstalováním nejnovější Microsoft Visual Studio aktualizace Service Pack. Uživatelé bez Visual Studio měli nainstalovat aktualizaci knihovny Microsoft.

Prohlášení

Společnost Microsoft potvrzuje, že se jedná o chybu v Microsoft produktů uvedených na začátku tohoto článku.
Tato chyba byla opravena v Visual Studio 6.0 Service Pack 3. Další informace o aktualizacích service Pack Visual Studio naleznete v následujících článcích znalostní báze Microsoft Knowledge Base:

194022Visual Studio 6.0 služby balíky co, kde, proč

194295Jak zjistit, že je nainstalována aktualizace service pack Visual Studio

Další informace

Uvolnění paměti několikrát vytvoří Nedefinovaný chování.

Vydání verzích ukázkový kód pod příčinou chyba aplikace při integrována s Visual C++ 6.0; kód způsobit Chyba aplikace při integrována s Visual C++ 5.0.

Ladění sestaví s buď Visual C++ 6.0 nebo Visual C++ 5.0 vydat požadavek:
   Debug Assertion Failed!
				

Je důležité Všimněte si, že stav malé bloku haldy (SBH) je neustále flux. Z tohoto důvodu jsou situacích, kde je možné žádné výrazu bude vystaven v sestavení ladění, ale v sestavení vydání dojde k chybě aplikace.

Verze sestavení v aplikaci Visual C++ 6.0 jsou citlivější uvolňování paměti vícekrát než 5.0 Visual C++. Pokud integrována s Visual C++ 5.0 v případě je jeden kde je nesprávné volání uvolnit innocuous. Pokud volání free() byly provedeny od původní více vzdálenější, je možné způsobit chybu aplikace. Existuje vysoká pravděpodobnost, že paměť poškozen.

Ukázkový kód

   // Compile options for Release builds /c
   // Compile options for Debug builds /c /Zi
   #include <malloc.h>
   int main(int argc, char* argv[])
   {
      char *pChar1 = (char *)malloc(10*sizeof(char));
      char *pChar2 = (char *)malloc(10*sizeof(char));
      free(pChar1);
      free(pChar1);
      return 0;
   }
				

Vlastnosti

ID článku: 194550 - Poslední aktualizace: 4. června 2005 - Revize: 3.0
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft Visual C++ 6.0 Enterprise Edition
  • Microsoft Visual C++ 6.0 Professional Edition
  • Microsoft Visual C++, 32-bit Learning Edition 6.0
Klíčová slova: 
kbmt kberrmsg kbqfe kbbug kbcode kbcrt kbfix kbvs600sp2fix kbvs600sp3fix KB194550 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:194550

Dejte nám zpětnou vazbu

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com