Fix segfault when freeing entities.

This commit is contained in:
Steve 2018-02-22 19:03:48 +00:00
parent b62b9fece7
commit dba5248a41
2 changed files with 14 additions and 7 deletions

View File

@ -122,8 +122,12 @@ void doEntities(void)
free(self);
/* assign prev entity to self */
self = prev;
/* assign prev as self, so that prev doesn't point at the now freed memory */
prev = self;
continue;
}
@ -189,13 +193,14 @@ void doEntities(void)
{
self->touch(touched[i]);
/* for objects that never move */
if (touched[i]->isStatic)
{
oldSelf = self;
self = touched[i];
touched[i]->touch(oldSelf); /* for objects that never move */
touched[i]->touch(oldSelf);
self = oldSelf;
}
@ -526,7 +531,7 @@ static int canWalkOnEntity(float x, float y)
SDL_Rect srcRect;
srcRect.x = x;
srcRect.x = y;
srcRect.y = y;
srcRect.w = 8;
srcRect.h = MAP_TILE_SIZE * 4;

View File

@ -143,12 +143,14 @@ static void resizeQTEntCapacity(Quadtree *root)
static int getIndex(Quadtree *root, int x, int y, int w, int h)
{
int index = -1;
int index, verticalMidpoint, horizontalMidpoint, topQuadrant, bottomQuadrant;
index = -1;
int verticalMidpoint = root->x + (root->w / 2);
int horizontalMidpoint = root->y + (root->h / 2);
int topQuadrant = (y < horizontalMidpoint && y + h < horizontalMidpoint);
int bottomQuadrant = (y > horizontalMidpoint);
verticalMidpoint = root->x + (root->w / 2);
horizontalMidpoint = root->y + (root->h / 2);
topQuadrant = (y < horizontalMidpoint && y + h < horizontalMidpoint);
bottomQuadrant = (y > horizontalMidpoint);
if (x < verticalMidpoint && x + w < verticalMidpoint)
{