Console C++ Application1.exe a déclenché un point d'arrêt

lorsque je tente de régler

cub.SetArray(cube);

J'obtiens une erreur

Console Application1.exe has triggered a breakpoint 

Ce que je fais mal? Lorsque j'essaie de débogage cub -> cubesarray je obtenir la taille -842150451. Je ne comprends pas pourquoi.Voici mon code

class Cube{
public:
static const int Change_ARRAY = 5;
private:
string color;
int size;
int *walls;
int n; //current size of array
int maximumsize; //maximum size of array
void Increase(int many);
public:
Cube(int maximumsize = 0);
~Cube();
void SetWalls(int wall);
void SetColor(string color);
void SetSize(int size);
string GetColor(){return color;}
int GetWalls(int i){return walls[i];}
int GetSize(){return size;}
int GetN(){return n;}
};
Cube::Cube(int maximumsize):n(0), maximumsize(maximumsize), size(size), walls(NULL){
if(maximumsize > 0){
walls = new int[maximumsize];
}
}
Cube::~Cube(){
if(walls){
delete [] walls;
}
}
void Cube::Increase(int many){
if(many > maximumsize){
int *newest = new int[many];
for(int i=0; i<n; i++)
newest[i] = walls[i];
delete [] walls;
walls = newest;
maximumsize = many;
}else if( many < maximumsize){
int *newest = new int[many];
for(int i=0; i<many; i++)
newest[i] = walls[i];
delete [] walls;
walls = newest;
n = maximumsize = many;
}
}
void Cube::SetWalls(int wall){
if(n == maximumsize) Increase(n + Change_ARRAY);
walls[n] = wall;
n++;
}
void Cube::SetColor(string color){
this->color = color;
}
void Cube::SetSize(int size){
this->size = size;
}
class CubesArray{
public:
static const int Change_Array = 5;
private:
Cube *cubesarray;
int currentsize; //current size of array
int maxsize; //maximumsize
void Change (int kk);
public:
CubesArray(int maxsize = 1);
~CubesArray();
void SetArray(Cube c);
Cube GetArray(int ind){return cubesarray[ind];}
int GetCsize(){return currentsize;}
};
CubesArray::CubesArray(int maxsize):cubesarray(NULL), currentsize(0), maxsize(maxsize){
if(maxsize > 0){
cubesarray = new Cube[maxsize];
}
}
CubesArray::~CubesArray(){
if(cubesarray){
delete [] cubesarray;
}
}
void CubesArray::Change(int kk){
if(kk > maxsize){
Cube *newarr = new Cube[kk];
for(int i=0; i<currentsize; i++)
newarr[i] = cubesarray[i];
delete [] cubesarray;
cubesarray = newarr;
maxsize = kk;
}if(kk < maxsize){
Cube *newarr = new Cube[kk];
for(int i=0; i<kk; i++)
newarr[i] = cubesarray[i];
delete [] cubesarray;
cubesarray = newarr;
currentsize = maxsize = kk;
}
}
void CubesArray::SetArray(Cube cub){
if(currentsize = maxsize) Change(currentsize + Change_Array);
cubesarray[currentsize] = cub;
currentsize++;
}
void Read(CubesArray & cub);
int main(){
CubesArray cub;
Read(cub);
system("pause");
return 0;
}
void Read(CubesArray & cub){
string color;
int size;
int i=0;
Cube cube;
ifstream fd(Data);
while(!fd.eof()){
fd >> color >> size;
cube.SetSize(size);
cube.SetColor(color);
cout << cube.GetColor() << " " << cube.GetSize() << " ";
while(fd.peek() != '\n' && !fd.eof()){
int w;
fd >> w;
cube.SetWalls(w);
cout << cube.GetWalls(i) << " ";
cub.SetArray(cube); //when I set cube to cub I get this error!!!
i++;
}
cout << endl;
fd.ignore();
}
}
  • Juste pour info, std::vector<int> walls; dans Cube, et std::vector<Cube> ferait une quantité importante de ce code disparaître. Et size(size) dans votre liste d'initialiseur est faux. Je pense size(0)?
  • Je sais, mais j'ai besoin de savoir quel est le problème avec les tableaux dynamiques
  • Commencer avec la taille() problème je l'ai mentionné, puis de travailler votre chemin vers les réponses ci-dessous (qui peut-être déjà que).
  • Pouvez-vous expliquer les buts spécifiques de size et n dans la classe Cube et pourquoi vous avez besoin des deux ?
  • Non, la taille(taille) dans l'initialiseur est ok (j'ai essayer de changer de taille(0), mais encore j'ai eu le même problème). Je pense qu'en quelque sorte le tableau ne peut pas augmenter?
  • Je peux vous faire Cube classe aller de noix avec un 2 ligne main() du programme. La raison en est qu'il viole la règle de trois. stackoverflow.com/questions/4172722/what-is-the-rule-of-three
  • "taille(la taille) dans l'initialiseur est ok" - Non, size(size) dans l'initialiseur est ok. Son est pour une période indéterminée jusqu'à ce que construit, et vous êtes la construction avec lui-même, ce qui construit avec une valeur indéterminée. Il n'y a pas de size paramètre dans le constructeur arg-liste. Si cela résout votre problème (et il ne va pas) n'est pas pertinente. c'est un comportement indéfini comme-écrit et doit être fixé indépendamment.

InformationsquelleAutor user3369351 | 2014-03-02