Stap 5: Weet u niet welke maat u bent?
HOOPJES VAN GEHEUGENC++ maakt samen met de stack, een andere grote pool van geheugen genaamd de heap. De heap kan worden gebruikt door de programmeur naar gratis of verdeelt, geheugen moet worden gebruikt voor het programma. Een programmeur kan het toewijzen van een willekeurige hoeveelheid geheugen uit de hoop dat met het sleutelwoord "nieuwe" zoals in het volgende voorbeeld:
char * pArray = nieuwe char [256];
U kunt het sleutelwoord new als je niet weet hoeveel geheugen je programma zal gebruiken.
Een gemeenschappelijk probleem dat veel programmeurs tegenkomen wanneer de toewijzing van geheugen iets is genaamd een "buffer overflow". Een bufferoverloop treedt op wanneer een uitdrukking of functie geheugen in de aangrenzende geheugenlocaties overschrijft. Dit kan gebeuren als gevolg van vaste lengte, matrices. Een gemeenschappelijk gebruik van matrices is te houden van tekenreeksen. U kunt twee tekenreeksen samen tot één aaneengeschakelde tekenreeks maken overstag. Als de hoeveelheid tekens in de tekenreeks gewoon groter dan de grootte van de matrix, dan jij is veroorzaakt een bufferoverloop.
(WAARSCHUWING: BUFFER OVERFLOWS ZIJN EEN GEMEENSCHAPPELIJK EXPLOITEREN DOOR HACKERS GEBRUIKT OM WILLEKEURIGE CODE UITVOEREN OP EEN EXTERN SYSTEEM.)
VERGEET NIET OM SCHOON TE MAKEN NA JEZELF
De toewijzing van geheugen off van de heap is een keurige eigenschap, maar het heeft een zeer groot gevaar in C++: als u geheugen off van de heap toewijzen, moet u niet vergeten om het terug.
U terug geheugen naar de heap die met het sleutelwoord "verwijderen" zoals hieronder:
char * pArray = nieuwe char [256];
... gebruik van het geheugen alle gewenste...
nu terugkeren het geheugenblok naar de heap
verwijderen [] pArray;
pArray = NULL;
(Nota: gebruik verwijderen verwijderen [] voor een matrix te retourneren van een niet-array.)
Als u geen heap memory retourneert wanneer u klaar bent met het, zal uw programma langzaam verbruiken geheugen en uiteindelijk meer en meer als het besturingssysteem probeert te vervullen de blijkbaar onverzadigbare gulzigheid vertragen. Uiteindelijk, zal het programma tot stilstand gekomen, zoals de o/s kan niet langer voldoen aan de verzoeken voor geheugen.
Terugkeer van hetzelfde geheugen naar de heap is niet zo heel slecht. Dat zorgt ervoor dat uw programma crasht vrijwel onmiddellijk. Het wordt beschouwd als goede programmering praktijken op nul uit een aanwijzer zodra u het geheugenblok waarnaar het verwijst voor twee zeer goede redenen hebt verwijderd:
●Deleting een pointer die NULL bevat heeft geen effect.
●Null is nooit een geldig adres. Proberen om toegang tot het geheugen op de NULL-locatie zal altijd zorgt ervoor dat uw programma crash onmiddellijk, die zal uiteinde u uit dat er een probleem is en maakt het een stuk gemakkelijker te vinden.
U hoeft te verwijderen van geheugen als uw programma spoedig afsluiten zal-alle heap-geheugen wordt hersteld op het besturingssysteem wanneer een programma wordt beëindigd. Terugkeer van geheugen dat u buiten de heap toewijzen is echter een goede gewoonte om te gaan.