Jump to content

  • Log In with Google      Sign In   
  • Create Account

We need your feedback on a survey! Each completed response supports our community and gives you a chance to win a $25 Amazon gift card!


Vector Subscript Out Of Range


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
3 replies to this topic

#1 superman3275   Crossbones+   -  Reputation: 2061

Like
0Likes
Like

Posted 19 December 2012 - 03:08 PM

Hello! I've recently been running into trouble where I'm loading a file. The error is telling me I have a vector subscript out of range, and after setting some breakpoints I know where the error is coming from, however I'm having trouble fixing it. I would be very happy if you could look at my code and see what you believe the problem is :)!

Map.h:
#pragma once
struct block;
namespace th
{
class Map
{
public:
Map(std::string mapLocation);
~Map(void);
void closeFile();
void loadFile(std::string fileLocation);
void newMap(std::string locationOfNewMap, std::vector<std::vector<block>> newValues);
std::vector<std::vector<block>> convertToBlocks();
std::vector<std::vector<block>> tiledMap();
private:
std::ifstream mapFile;
std::vector<std::vector<int>> mapInIntegers;
std::vector<std::vector<block>> mapInBlocks;
};
}
Map.cpp:
#include "StdAfx.h"
#include "Map.h"

th::Map::Map(std::string mapLocation)
{
mapFile.open(mapLocation);
//Setting The Map's Size
int lIndexSize, rIndexSize;
mapFile >> lIndexSize;
mapFile >> rIndexSize;
mapInIntegers.resize(lIndexSize);
for (int index = 0; index < lIndexSize; ++index)
{
 
  mapInIntegers[index].resize(rIndexSize);
}
//Loading The Map
int currentPosition = 2;
int currentValue = 0;

for(int lindex = 0; lindex < mapInIntegers.size(); ++lindex)
{
  for(int rindex = 0; rindex < mapInIntegers[lindex].size(); ++rindex)
  {
   ++currentPosition;
   mapFile >> currentValue;
   mapInIntegers[lindex][rindex] = currentValue;
  }
}
convertToBlocks();
}

th::Map::~Map(void)
{
}

std::vector<std::vector<block>> th::Map::convertToBlocks()
{
mapInBlocks.resize(mapInIntegers.size());
for(unsigned int lindex = 0; lindex < mapInBlocks.size(); ++lindex)
{
  mapInBlocks[lindex].resize(mapInIntegers[lindex].size());
}
for(unsigned int lindex = 0; lindex < mapInIntegers.size(); ++lindex)
{

  for(unsigned int rindex = 0; rindex < mapInIntegers[rindex].size(); ++rindex)
  {

   switch (mapInIntegers[rindex][lindex])
   {
   case 0:
    mapInBlocks[lindex][rindex].type = (blockType)0;
   case 1:
    mapInBlocks[lindex][rindex].type = (blockType)1;
   }
  }
}

return mapInBlocks;
}

void th::Map::closeFile()
{
mapFile.close();
}

void th::Map::loadFile(std::string locationOfNewMap)
{
mapFile.open(locationOfNewMap);
}

void th::Map::newMap(std::string locationOfNewMap, std::vector<std::vector<block>> newValues)
{
std::ofstream newFile;
newFile.open(locationOfNewMap);
if(newFile.good())
{
  newFile << newValues.size();
  newFile << " ";
  newFile << newValues[0].size();
  for(unsigned int lindex = 0; lindex < newValues.size(); ++lindex)
  {
   newFile << "/n";
   for(unsigned int rindex = 0; rindex < newValues[lindex].size(); ++rindex)
   {
    newFile << newValues[lindex][rindex].type << " ";
   }
  }
}
}

std::vector<std::vector<block>> th::Map::tiledMap()
{
return mapInBlocks;
}

The error comes up right here:
std::vector<std::vector<block>> th::Map::convertToBlocks()
{
mapInBlocks.resize(mapInIntegers.size());
for(unsigned int lindex = 0; lindex < mapInBlocks.size(); ++lindex)
{
  mapInBlocks[lindex].resize(mapInIntegers[lindex].size());
}

/*After running through the first for loop below once, it returns:
Vector Subscript Out Of Range the second time :0!*/

for(unsigned int lindex = 0; lindex < mapInIntegers.size(); ++lindex)
{
  for(unsigned int rindex = 0; rindex < mapInIntegers[rindex].size(); ++rindex)
  {
   switch (mapInIntegers[rindex][lindex])
   {
   case 0:
    mapInBlocks[lindex][rindex].type = (blockType)0;
   case 1:
    mapInBlocks[lindex][rindex].type = (blockType)1;
   }
  }
}
return mapInBlocks;
}

As I detail in the comment, in the latter code it loops through the for loop once before giving me the error. All help is appreciated. And if it's any consolation, here's what the file looks like:
File:
1 1
1

All help is appreciated :)!

I'm a game programmer and computer science ninja ph34r.png!

Here's my 2D RPG-Ish Platformer Programmed in Python + Pygame, with a Custom Level Editor and Rendering System!

 

Here's my Custom IDE / Debugger Programmed in Pure Python and Designed from the Ground Up for Programming Education!

Want to ask about Python, Flask, wxPython, Pygame, C++, HTML5, CSS3, Javascript, jQuery, C++, Vimscript, SFML 1.6 / 2.0, or anything else? Recruiting for a game development team and need a passionate programmer? Just want to talk about programming? Email me here:

hobohm.business@gmail.com

or Personal-Message me on here smile.png!


Sponsor:

#2 Álvaro   Crossbones+   -  Reputation: 13937

Like
1Likes
Like

Posted 19 December 2012 - 03:18 PM

for(unsigned int rindex = 0; rindex < mapInIntegers[rindex].size(); ++rindex)

That should be
for(unsigned int rindex = 0; rindex < mapInIntegers[lindex].size(); ++rindex)

Also, there should be a `break; before `case 1:'.

switch (mapInIntegers[rindex][lindex])
   {
   case 0:
	mapInBlocks[lindex][rindex].type = (blockType)0;
   case 1:
	mapInBlocks[lindex][rindex].type = (blockType)1;
   }



#3 Álvaro   Crossbones+   -  Reputation: 13937

Like
1Likes
Like

Posted 19 December 2012 - 03:20 PM

switch (mapInIntegers[rindex][lindex])

Shouldn't the indices be reversed, like everywhere else?

You should just go over your code and make sure you get all those details right.

#4 superman3275   Crossbones+   -  Reputation: 2061

Like
0Likes
Like

Posted 19 December 2012 - 04:03 PM

You solved it! My map is loading and displaying correctly now! I can't believe how trivial the problem was. Thank you so much! You're awesome, thank you so much for helping me :)! Cheers!

I'm a game programmer and computer science ninja ph34r.png!

Here's my 2D RPG-Ish Platformer Programmed in Python + Pygame, with a Custom Level Editor and Rendering System!

 

Here's my Custom IDE / Debugger Programmed in Pure Python and Designed from the Ground Up for Programming Education!

Want to ask about Python, Flask, wxPython, Pygame, C++, HTML5, CSS3, Javascript, jQuery, C++, Vimscript, SFML 1.6 / 2.0, or anything else? Recruiting for a game development team and need a passionate programmer? Just want to talk about programming? Email me here:

hobohm.business@gmail.com

or Personal-Message me on here smile.png!





Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS