c++ - Segfault when accessing non-null pointer? -
the code works fine in linux environment, in windows crashes 5-10 seconds after program starts. debugger points n->fired = true; problem?
void particlesystem::privprocessparticles(pnodeptr n, double frametime) { while(n != null) { n->fired = true; if(!n->immortal) n->life -= frametime; //decrement life n->particle.applyaccel2d(frametime); /* since oldest particles on top of queue, if life zero, dequeue! */ if(n->life <= 0) { if(head != null && !n->immortal) { pnodeptr curr; curr = head; head = head->next; delete curr; } } n = n->next; } } allocation:
void particlesystem::addparticle(double lifein, double x, double y, double angle, double size, double force, bool immortalin) { //increment particle count count++; //allocate pnodeptr n = new particlenode; //initialize n->particle.createquad(size); n->particle.settexture(texture); n->particle.setpos2d(x, y); n->particle.setrot2d(angle); n->particle.settopspeed(topspeed); n->particle.setvelocity(force); n->life = lifein; n->immortal=immortalin; n->fired = false; n->next = null; //place if (head == null) { head = n; tail = n; n->next = null; } else { tail->next = n; tail = n; } } node:
struct particlenode { quad particle; double life; bool fired; bool immortal; particlenode* next; };
there's not enough information posted. however, here's 1 potential source of problem.
when privprocessparticles function performs iterations on n, can decide delete head element of list. possible @ moment when decides delete head, n same head? if so, deleting head turns n dangling pointer, leads disastrous consequences @ n = n->next.
add assert(curr != n) before delete curr , see whether assertion holds or fails.
anyway, starting value of n passed privprocessparticles caller? can chance happen same head?
p.s. also, out of curiosity, logic use decide whether perform deletion or not seems suggest decision made node n (you check n->life <= 0 , n->immortal). proceed delete head, not n... design?
p.p.s. nitpick: doing excessive n->next = null initializations in addparticle.
Comments
Post a Comment