void Map::Render(SDL_Surface* tileSet, SDL_Surface* display) const
{
const int tileSize = Tile::GetTileSize();
Vector2D cameraLocation = Camera::control.GetLocation();
//Checking boundaries
if (cameraLocation.x < 0)
cameraLocation.x = 0;
else if (cameraLocation.x > width * tileSize)
cameraLocation.x = width * tileSize;
if (cameraLocation.y < 0)
cameraLocation.y = 0;
else if (cameraLocation.y > height * tileSize)
cameraLocation.y = height * tileSize;
Vector2D first;
first.x = (int)cameraLocation.x / tileSize;
first.y = (int)cameraLocation.y / tileSize;
Vector2D offset;
offset.x = (int)cameraLocation.x % tileSize;
offset.y = (int)cameraLocation.y % tileSize;
for (int y=0; y<height; y++)
{
for (int x=0; x<width; x++)
{
//Segmentation fault happens here
const int index = \
rows[y + first.y].columns[x + first.x].GetTileID();
Rectangle srcRect = Tile::GetSourceRect(index);
const int xOffset = x * tileSize - offset.x;
const int yOffset = y * tileSize - offset.y;
Surface::Blit(xOffset, yOffset, srcRect, tileSet, display);
}
}
}
The segmentation fault happens at the GetTileID() function. Additional data:
width = 50; height = 200; tileSize = 96; //Variable values when the segmentation fault happens cameraLocation.x = 10; cameraLocation.y = 100; first.x = 0; first.y = 1; offset.x = 10; offset.y = 4; x = 9; y = 198; xOffset = 854; yOffset = 19004;






