19. juni 2001 - 14:01Der er
33 kommentarer og 3 løsninger
free() kald med et this->... argument.
Jeg har et medlem af en class, der i en funktion fra den samme class, bliver initialiseret ved hjælp af en malloc(); - i en anden medlemsfunktion, skal jeg så frigive hukommelsen for, at gøre antallet af elementer større/mindre, og så skal jeg jo først frigive den hukommelse, der allerede er tildelt pointeren - det gør jeg på følgende måde:
free(this->values);
Når jeg kører programmet, får jeg bare en acess violation på den linie... hvad sker der for den?!
realloc kopierer selv. Ellers er der ikke meget fidus. Den er så smart at lade data ligge hvor de ligger, hvis der er plads. Og ellers flytter den det selv.
det virker ikke i den funktion hvor jeg bruger this->count++ - der får jeg en access vilation i linien: this->values[j-1]=this->values[i-1]; og det er jo også klart, når jeg jo bevæger mig ud på ualokkeret område i rammen:
Jamen, så svar på mit spørgsmål, ellers spilder vi da hinandens tid: \"Hvordan alloc-er du this->values første gang? Og er det ved første indsættelse, eller senere du får fejlen.\"
Oki - det må du undskylde - havde ikke set at du havde skrevet det :(
Jeg allokerer ikke this->values, da objektet fra start af jo ikke har nogle værdier (this->count=0). Den allokeres først, når der bliver tilføjet nogle værdier (i den funktion du lige har hjulpet med).
Jeg regner med at det er ved første indsættelse, at fejlen sker, da jeg ikke kan se det precist :-/
Så nu har jeg lavet mit hjemmearbejde :) Jeg har lavet om i constructoren, så \"values\" initieres med en malloc af een int. Så har jeg fået afgrænset problemet til, at der kun kommer acess violation i funktionen til at fjerne et element:
Jeg har testet lidt mere, og borland builder giver en \"invalid pointer opreation\" runtime fejl - før jeg får min acces violation fra windows - stadigt i overstående funktion...
Så vidt jeg ved, skal der da bruges en konstant værdi ved initialiseringen int* tempValues = new int[...]; Det var derfor jeg ikke prøvede den måde - har dog ikke C++ kørende, men jeg tester det om 2 sek...
Du der, emil, kan du ikke lige sende al din kode til mig (klik på mit navn), så kan jeg lige hælde det igennem en oversætter her... Det er nemmere end at konstruere det hele igen :)
Du kan godt initialisere this->value til at pege på et array med 0 elementer. Og ja, det skal alloc-es.
Beklager meget den lange stilhed, men tid er ikke meget jeg har af for tiden, så projektet er røget nederst i bunken...
Jeg deler pointene lige imellem jer, og kigger på jeres svar, når jeg får tid :)
E-)mil
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.