Hallo Ich habe etwas Erfahrung mit der Programmierung, aber ich bin nicht sehr gut mit Zeigern. Ich habe versucht, dieses Programm zu debuggen, an dem ich gearbeitet habe, aber es gibt mir immer einen Segmentierungsfehler. Mein Code ist folgende:Nicht sicher, was meinen Segmentierungsfehler verursacht - C++
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);
}
Wenn ich kompilieren Sie den Code und es enthält dieser Abschnitt es das Programm läuft, aber dann an:
#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;
}
Mein Problem mit dem folgenden Teil des Codes zu sein scheint Am Ende bekomme ich einen Segmentierungsfehler. Wenn ich jedoch diesen Abschnitt auskommentiere, läuft alles gut und es gibt keinen Segmentierungsfehler. Ich verstehe nicht, wie eine reguläre ganze Zahl einen Segmentierungsfehler verursachen könnte. Wenn jemand erklären könnte, welchen Fehler ich gemacht habe und wo ich ihn gemacht habe, würde ich das sehr schätzen. Vielen Dank im Voraus
Dank Ich wusste, es war etwas wirklich einfaches. Ich wusste einfach nicht genau was es war. – rhololkeolke