[C]programma klapt eruit bij linked list bewerking

Pagina: 1
Acties:

  • Ronald Koeman
  • Registratie: December 2001
  • Laatst online: 20-05 22:12
Ik heb het volgende stukje code(fragment van een groter programma):
code:
1
2
3
4
5
6
7
8
9
10
11
while (lijst->next != NULL)
  {
  if ((lijst->woord)== zoekwoord)
  {
    aantal++;
    slaover=lijst->next;
    vorigelijst->next=slaover;
  }
  vorigelijst=lijst->next;
  lijst=lijst->next;
}


vooraf is een node van de lijst gedeclareerd als:
code:
1
2
3
4
5
6
typedef struct _node
{ char woord[256];
  int aantal;
  struct _node *next;
}
node, *pNode;


lijst, slaover en vorigelijst zijn pointers van het type pNode.
Op het einde van mijn lijst heb ik node->next de waarde NULL gegeven:
code:
1
lijst->next=NULL;


Het programma knalt er dus uit in de while-lus, met een acces violation. Ik begrijp alleen niet waarom...iemand?

[ Voor 19% gewijzigd door Ronald Koeman op 26-09-2004 21:38 ]


  • Robtimus
  • Registratie: November 2002
  • Laatst online: 18:07

Robtimus

me Robtimus no like you

Accessviolation kan in 1 van de volgende statements zitten:
code:
1
2
3
4
5
while (lijst->next != NULL)
if ((lijst->woord)== zoekwoord)
slaover=lijst->next;
vorigelijst->next=slaover;
vorigelijst=zoeklijst->next;
Dus lijst, vorigelijst of zoeklijst is NULL.

Ik neem aan dat lijst != NULL, dan is of vorigelijst of zoeklijst NULL. Print de waarde daarvan eens uit en je ziet waar het probleem ligt.

[ Voor 4% gewijzigd door Robtimus op 26-09-2004 19:10 ]

More than meets the eye
There is no I in TEAM... but there is ME
system specs


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 18:13
Het zal wel aan mij liggen, maar moet je niet ergens een keer wat nieuws aan lijst toekennen?

  • Ronald Koeman
  • Registratie: December 2001
  • Laatst online: 20-05 22:12
Euhm...:s :+

Ik zat ff behoorlijk te slapen, dank voor jullie reacties :)

[ Voor 72% gewijzigd door Ronald Koeman op 26-09-2004 19:22 ]


  • Ronald Koeman
  • Registratie: December 2001
  • Laatst online: 20-05 22:12
OK, code geupdate, alleen nog steeds die access violation...begrijp 't niet.

Edit: lijst lijkt de waarde 0 te hebben, vandaar de foutmelding.

[ Voor 34% gewijzigd door Ronald Koeman op 26-09-2004 21:44 ]


  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Je vergelijkt hiermee: if ((lijst->woord)== zoekwoord), ook geen strings heh. Maar alleen het adres, dus die zal iha nooit gelijk zijn.

Als je in je eerste itteratie het woord zou vinden, dan is vorigelijst nog niet geinitialiseerd... Ik denk dat je even je volledige code moet posten.

[ Voor 11% gewijzigd door Zoijar op 26-09-2004 21:48 ]


  • Ronald Koeman
  • Registratie: December 2001
  • Laatst online: 20-05 22:12
lijst->woord is het adres van woord, en niet 't woord zelf bedoel je?
Moet ik dan &lijst->woord doen oid?

vorige lijst wordt buiten de loop al geinitialiseerd (dacht ik).
Ik controleer het even op de manier de iceman suggereert, met wat printf's.

[ Voor 45% gewijzigd door Ronald Koeman op 26-09-2004 21:52 ]


  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Nee, je kan zou niet een string vergelijken. Je moet het byte voor byte afgaan. Of anders iets als str(n)cmp() gebruiken. Je vergelijkt nu alleen of ze op hetzelfde geheugen adres beginnen.

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Ronald Koeman schreef op 26 september 2004 @ 21:40:
OK, code geupdate, alleen nog steeds die access violation...begrijp 't niet.

Edit: lijst lijkt de waarde 0 te hebben, vandaar de foutmelding.
Even stomme vraag, maar heb je al eens simpelweg door de code gestept en de variabelen geinspecteerd of naar een console window gedumpt?

GoT is niet bedoeld om code voor te debuggen maar om problemen op te lossen waar je niet uitkomt nadat je zelf al het debugwerk hebt gedaan wat je kunt doen. Lijkt me dat je hier met wat simpel stepwerk toch wel uit moet kunnen komen? :)

Professionele website nodig?

Pagina: 1