SymbolTable

  • Onderwerp starter Onderwerp starter TvL
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

TvL

Nieuwe gebruiker
Lid geworden
6 okt 2006
Berichten
1
Hallo mensen,

Ik probeer een symboltable te maken. Om een of andere reden krijg ik een segmentation fault en ik heb geen enkel benul waarom. Wanneer ik mijn programma run met valgrind, zie ik enkele invalid writes en veel invalid reads.

Ik hoop dat iemand misschien even wilt kijken wat er fout gaat. Ik attach de source aan dit bericht.

De SymbolTable is een array van LinkedLists. De array krijgt een lengte die meegegeven wordt in de constructor van de SymbolTable. In de LinkedLists worden Nodes geplaatst welke een string en een Node* hebben.

Na heel veel debuggen, ben ik erachter gekomen dat de Node en List klasse geen errors geven. Wanneer ik de SymbolTable debug, krijg ik wel errors.
Daarom zal ik hieronder even de code van de SymbolTable plakken.

Code:
#include "SymbolTable.h"

using namespace std;

SymbolTable::SymbolTable(int asize) {
        this->size = asize;
        list_array[size];
        for(int i=0;i<asize;i++) {
                list_array[i] = new List;
        }
}

int SymbolTable::hash(string item) {
        char * ss = const_cast<char*>(item.c_str());
        int pos = 0;
        while(*ss) pos += *ss++;
        return pos % size;
}

Node * SymbolTable::insert(string item) {
        int pos = hash(item);
        return list_array[pos]->insert(item);
}

void SymbolTable::remove(string item) {
        list_array[hash(item)]->remove(item);
}

Node * SymbolTable::find(string item) {
        return list_array[hash(item)]->find(item);
}

bool SymbolTable::isMember(string item) {
        if(find(item) != NULL) return true;
        else return false;
}

void SymbolTable::print() {
        for(int i=0;i<size;i++) {
                printf("%i: ",i);
                list_array[i]->print();
        }
}

SymbolTable::~SymbolTable() {
        for(int i=0;i<size;i++) {
                delete list_array[i];
        }
}

Ik vermoed dat ik de code voor de destructor niet goed heb, maar als ik de code daar uitcomment, heb alsnog last van invalid writes. Wanneer ik de SymbolTable een bepaalde lengte geef, verschijnen er ook rare elementen in mijn lijsten.....

Als iemand hier naar wil kijken, zou ik heel blij worden. Ik loop er al meerdere dagen mee te *****n, maar het wil maar niet lukken.

PS: Het is gemaakt onder linux, een makefile zit erbij
 

Bijlagen

Laatst bewerkt:
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan