Vraag & Antwoord

Programmeren

C++ | Geheugen vrijgeven

8 antwoorden
  • Ok, ik heb een probleempje met geheugen vrijgeven. In het volgende kleine testproggie maak ik een array van pointers naar chars. Vraag hier geheugen voor aan en geef het aan het einde weer vrij. Dit werkt goed en fouloos. Maar als ik iets met een van de elementen gaan doen loopt het programma run-time vast. Iemand enig idee? [code:1:cdd9639149] #include <iostream.h> #include <string.h> #define AANTAL_WOORDEN 30 #define LENGTE_WOORD 10 int main() { int j; char *C[AANTAL_WOORDEN], letter[] = "Naam"; for( int i=0; i < 10000; i++) { for( j=0; j < AANTAL_WOORDEN; j++) C[j] = new char( LENGTE_WOORD ); strcpy(C[0], letter); /* zonder dit statement doet alles het wel */ /* hier komt je programma */ for( j=0; j < AANTAL_WOORDEN; j++ ) delete[] C[j]; } return 0; } [/code:1:cdd9639149] Alvast bedankt voor de hulp.
  • Volgens mij vul je alleen maar een element van je array, namelijk C[0], en de rest blijft "leeg". Miischien heb je iets aan de volgende code als het je bedoeling is om een aantal pointers naar char te definieren en die te vullen met een string. #include <iostream.h> #include <string.h> #define AANTAL_WOORDEN 30 #define LENGTE_WOORD 10 int main() { int i,j; char *C[AANTAL_WOORDEN], letter[] = "Naam"; for(j=0; j < AANTAL_WOORDEN; j++) { C[j] = new char( LENGTE_WOORD ); strcpy(C[j], letter); } //rest van je programma for( j = AANTAL_WOORDEN-1; j >= 0; j-- ) delete[] C[j]; return 0; }
  • Dat klopt, ik vul ook alleen element 0. Het was als voorbeeld bedoeld (het programma doet "in het echt" uiteraard veel meer), jouw code compiled ook wel maar ik krijg nog steeds een illegale handeling foutmelding als ik dit programma draai of ligt dat aan mijn compiler (ik gebruik VC++ 6.0)? Het denk ik nog steeds te maken met het feit dat ik verkeerd geheugen aanvraag of vrijgeef... Iemand een idee?
  • Bedoel je dat als je alleen je code compileert zonder dat er meer code staat dan wat je hier geeft of is er nog meer code? Als je alleen mijn code compileert zonder iets er verder in dan krijg je exact hetzelfde probleem? Je krijgt een runtime error zeg je. Hoe luidt deze?
  • Als ik jou code compileer dan krijg ik geen errors. Maar als ik deze run dan krijg ik de volgende fout (in jouw ongewijzigde code): DEBUG ERROR DAMAGE: after normal block (#72) at 0x004316B0 press retry to debug the application Krijg jij met de code dan geen runtime error??
  • Ik heb even de code getest op andere PC met Visual C++ 6 en met een andere compiler. De actie via VC++6 gaf dezelfde melding als degene die jij krijgt terwijl er bij het gebruik van de andere compiler op dezelfde PC geen foutmeldingen ontstaan. Ik moet erbij zeggen dat ik zelf alleen gebruik maak van het linux platform en van de bijbehorende compilers en interpreters. Misschien dat je op de site van de leverancier van je compiler wat imformatie kan vinden over dit probleem
  • Onwijze bedankt voor je hulp! Ik heb het probleem nu opgelost. Als je in VC++ de Active Configuration omzet van Debug (waar hij standaard op staat) naar Release dan doet alles het wel. Een foutje in Micro$oft Visual C++ zou ik denken...
  • Hi, Het fout zit nog steeds in je programma. Hier maak je een fout: C[j] = new char( LENGTE_WOORD ); waardoor bij strcpy(C[0], letter); alles misgaat... verander de eerste regel in: C[j] = new char [ LENGTE_WOORD ]; En je zult zien dat zowel bij Release en Debug alles goed gaat...

Beantwoord deze vraag

Weet jij het antwoord op deze vraag? Registreer of meld je aan met je account

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.