C++ 不确定是什么导致了我的分段错误-C++;
嗨,我有一些编程经验,但我不太擅长指针。我一直在试着调试这个我一直在做的程序,但它总是给我一个分段错误。我的代码如下:C++ 不确定是什么导致了我的分段错误-C++;,c++,segmentation-fault,C++,Segmentation Fault,嗨,我有一些编程经验,但我不太擅长指针。我一直在试着调试这个我一直在做的程序,但它总是给我一个分段错误。我的代码如下: #include <iostream> using namespace std; class hexagon { public: hexagon(); ~hexagon(); void setSide(int side, hexagon *hexpiece); hexagon* getSide(int side); vo
#include <iostream>
using namespace std;
class hexagon
{
public:
hexagon();
~hexagon();
void setSide(int side, hexagon *hexpiece);
hexagon* getSide(int side);
void setPos(int x, int y);
int getX();
int getY();
void setID(int id);
int getID();
private:
hexagon *side0, *side1, *side2, *side3, *side4, *side5;
int itsid, itsx, itsy;
};
hexagon::hexagon()
{
side0 = NULL;
side1 = NULL;
side2 = NULL;
side3 = NULL;
side4 = NULL;
side5 = NULL;
}
hexagon::~hexagon()
{
}
void hexagon::setSide(int side, hexagon *hexpiece)
{
switch(side)
{
case 0:
side0 = hexpiece;
break;
case 1:
side1 = hexpiece;
break;
case 2:
side2 = hexpiece;
break;
case 3:
side3 = hexpiece;
break;
case 4:
side4 = hexpiece;
break;
case 5:
side5 = hexpiece;
break;
default:
cout << "ERROR: Invalid side passed as argument" << endl;
break;
}
}
hexagon* hexagon::getSide(int side)
{
switch(side)
{
case 0:
return side0;
break;
case 1:
return side1;
break;
case 2:
return side2;
break;
case 3:
return side3;
break;
case 4:
return side4;
break;
case 5:
return side5;
break;
default:
cout << "EROR: Invalide side passed as argument" << endl;
cout << "Returning side0 by default" << endl;
return side0;
break;
}
}
void hexagon::setPos(int x, int y)
{
itsx = x;
itsy = y;
}
int hexagon::getX()
{
return itsx;
}
int hexagon::getY()
{
return itsy;
}
void hexagon::setID(int id)
{
itsid = id;
}
int hexagon::getID()
{
return itsid;
}
int main()
{
hexagon hexpieces[120];
int tempx, tempy;
tempx = 0;
tempy = 0;
for(int i = 0; i<121; i++)
{
if(i%11 == 0)
{
tempx = 7*(i/11);
tempy = 12*(i/11);
}
else
{
tempx = tempx + 14;
}
cout << "Setting hexpiece" << i << " x to " << tempx << " and y to " << tempy << endl;
hexpieces[i].setPos(tempx, tempy);
}
for(int i=0; i<121; i++)
{
cout << "Setting hexpiece" << i << " id" << endl;
hexpieces[i].setID(i);
for(int j = 0;j<6; j++)
{
cout << "Setting hexpiece" << i << " side" << j << endl;
if(j == 0 && i > 10 && i % 11 != 10)
{
hexpieces[i].setSide(j,&(hexpieces[i-10]));
}
else if(j == 1 && i % 11 != 10)
{
hexpieces[i].setSide(j,&(hexpieces[i+1]));
}
else if(j == 2 && i < 110)
{
hexpieces[i].setSide(j,&(hexpieces[i+11]));
}
else if(j == 3 && i % 11 != 0 && i < 110)
{
hexpieces[i].setSide(j,&(hexpieces[i+10]));
}
else if(j == 4 && i % 11 != 0)
{
hexpieces[i].setSide(j,&(hexpieces[i-1]));
}
else if(j == 5 && i > 10)
{
hexpieces[i].setSide(j,&(hexpieces[i-11]));
}
}
}
hexagon *itr1;
itr1 = hexpieces;
cout << "Hexpiece" << itr1->getID() << " side1 is connected to Hexpiece";
itr1 = itr1->getSide(1);
cout << itr1->getID() << endl;
cout << "Hexpiece" << itr1->getID() << " side2 is connected to Hexpiece";
itr1 = itr1->getSide(2);
cout << itr1->getID() << endl;
cout << "Hexpiece" << itr1->getID() << " side4 is connected to Hexpiece";
itr1 = itr1->getSide(4);
cout << itr1->getID() << endl;
return 0;
}
#包括
使用名称空间std;
六角类
{
公众:
六边形();
~hexagon();
空隙设置侧(内侧,六角*六角);
六角*getSide(内侧);
无效设置位置(整数x,整数y);
int getX();
int getY();
void setID(int id);
int getID();
私人:
六边形*side0、*side1、*side2、*side3、*side4、*side5;
intitsid、itsx、itsy;
};
hexagon::hexagon()
{
side0=NULL;
side1=NULL;
side2=NULL;
side3=NULL;
side4=NULL;
side5=NULL;
}
hexagon::~hexagon()
{
}
空心六边形::设置侧(内侧,六边形*六角件)
{
开关(侧)
{
案例0:
侧0=六角体;
打破
案例1:
侧面1=六角体;
打破
案例2:
侧面2=六角体;
打破
案例3:
侧面3=六角体;
打破
案例4:
侧面4=六角体;
打破
案例5:
侧面5=六角体;
打破
违约:
couthexpieces
是一个长度为120的数组,因此它的最大索引是119。您正试图使用i
=120访问hexpieces[i]
(这是您的循环的最后一个索引)。因为您没有“拥有”内存不足时,会出现分段错误。定义阵列时,会为120个片段分配存储空间:
hexagon hexpieces[120];
但在循环中,您迭代索引0到120,这实际上是121个位置:
for(int i = 0; i<121; i++)
{
//...
}
for(inti=0;i乍一看:
for(int i = 0; i<120; i++)
for(int i=0;i您定义了“六边形六角片[120];“但是使用”for(int i=0;i此外,使用STL向量可以避免数组越界等问题。谢谢,我知道这很简单。只是不知道它到底是什么。
for(int i = 0; i<120; i++)