Avatar billede xiol Nybegynder
30. november 2005 - 23:12 Der er 5 kommentarer og
1 løsning

Problemer med Strings og dynamisk allokering

Jeg får en runtime fejl når min destructor bliver kaldt.
Er der nogen problemer med at dynamisk alloker et array af srtings og og delete det igen sener?

jeg har ved lagt koden som giver fejlen her.

//Class.h

#include <iostream>
#include <string>

using namespace std;

class Class
{
public:
    Class(string array[], int arraySize);
    void Print(void);
    ~Class();

private:
   
    int antal;
    string* MyArray;
};

//Class.cpp

#include "Class.h"

Class::Class(string array[], int arraySize)
{   
    antal = arraySize;
   
    MyArray =new string [arraySize];
    MyArray = array;
}

void Class::Print(void)
{
        cout << MyArray[0];
}

Class::~Class()
{
    delete [] MyArray;
}


//main.cpp

#include "Class.h"

void main()
{
    string noget[5];
   
    noget[0] = "noget0";
    noget[1] = "noget1";
    noget[2] = "noget2";
    noget[3] = "noget3";
    noget[4] = "noget4";

    Class MyClass(noget,5);
    MyClass.Print();
}

På forhånd tak

Xiol
Avatar billede bertelbrander Novice
30. november 2005 - 23:16 #1
I Class::Class har du:
    MyArray =new string [arraySize];
    MyArray = array;

Det er ikke nogen god idé, du skal i stedet kopiere fra array til MyArray.
Avatar billede bertelbrander Novice
30. november 2005 - 23:19 #2
Dvs Class::Class kunne se sådan ud:
Class::Class(string array[], int arraySize)
{
    antal = arraySize;

    MyArray = new string [arraySize];
    int i;
    for(i = 0; i < arraySize; i++)
      MyArray[i] = array[i];
}
Avatar billede xiol Nybegynder
30. november 2005 - 23:20 #3
tænker du på en plads af gangen??
Avatar billede xiol Nybegynder
30. november 2005 - 23:22 #4
det virker tak for det. smider du et svar så, sender jeg nogle point i din retning
Avatar billede bertelbrander Novice
30. november 2005 - 23:24 #5
Problemet med din kode er at du først allokerer plads til arraySize strings, og sætter MyArray til at pege på dette array af strenge, og i næste linie sætter du MyArray til at pege på array, og glemmer dermed det du lige har allokeret.
Når du så i destructoren vil delete dit array forsøger du så at delete det array du har i main, og ikke det du har allokeret.

Man kunne overveje at bruge en vector<string>

Jeg samler ikke på point.
Avatar billede xiol Nybegynder
30. november 2005 - 23:27 #6
Tak for der. Det gir jo meget mening når man lige tænker over det.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester