#include <cstdio>
#include <cstring>
const int n = 10;
class Voda {
int **M;
public:
Voda();
~Voda();
void chistka();
void vyvod();
void vvodu(int zn, int x, int y){M[x][y] = zn;}
};
Voda::Voda()
{
M = new int *[n];
for (int i=0; i<n; i++) {
M = new int [n];
for (int j=0; j<n; j++)
M[j] = 5;
}
}
Voda::~Voda()
{
for (int i=0; i<n; i++) delete M;
delete M;
}
void Voda::chistka()
{
// memset(M, 5, sizeof(M)); Не работает почемуто
for(int i=0; i<n; i++)
for(int j=0; j<n; j++)
M[j] = 5;
}
void Voda::vyvod()
{
for(int i=0; i<n; i++){
for(int j=0; j<n; j++)
printf("%2d", M[j]);
printf("\n");
}
}
class Paluba{
Voda* M;
int dz, x, y;
public:
Paluba(Voda*, int, int);
void sever(){y--;}
void yug(){y++;}
void vostok(){x++;}
void zapad(){x--;}
void ranil(){dz = 2;}
void ubil(){dz = 0;}
void vvodu();
};
Paluba::Paluba(Voda* _M, int _x, int _y)
{
M = _M;
x = _x; y = _y; dz = 1;
}
void Paluba::vvodu()
{
M->vvodu(1, x, y);
}
class Korabl{
Voda* VM;
Paluba** M;
int kp;
public:
Korabl(Voda*, int, int, int);
void vvodu();
};
Korabl::Korabl(Voda* _VM, int _kp, int x, int y)
{
VM = _VM;
kp = _kp;
M = new Paluba* [kp];
for(int i=0; i<kp; kp++)
M = new Paluba(VM, x, y + i);
}
void Korabl::vvodu()
{
for(int i=0; i<kp; kp++)
M->vvodu();
}
int main()
{
Voda more;
more.vyvod();
Korabl linkor(&more, 4, 2, 2);//Зависает с этой строки
linkor.vvodu();
more.vyvod();
return 0;
}
"Мистическое" зависание
И для этого решил написать программу "морской бой".
Компиллирую g++ом.
В самом начале столкнулся с проблемой зависания в конструкторе класса "Korabl".
Отладчик (gdb) при пром запуске ничего не говорит.
Подскажите, где я напутал?
Код:
Да, kp+1 - это классно. И вправду - мистика...
Код:
Korabl::Korabl(Voda* _VM, int _kp, int x, int y) {
VM = _VM;
kp = _kp;
M = new Paluba* [kp];
//for(int i=0; i<kp; kp++)
for(int i=0; i<kp; i++) // <<<<<<
M = new Paluba(VM, x, y + i);
}
void Korabl::vvodu() {
//for(int i=0; i<kp; kp++)
for(int i=0; i<kp; i++) // <<<<<<
M->vvodu();
}
VM = _VM;
kp = _kp;
M = new Paluba* [kp];
//for(int i=0; i<kp; kp++)
for(int i=0; i<kp; i++) // <<<<<<
M = new Paluba(VM, x, y + i);
}
void Korabl::vvodu() {
//for(int i=0; i<kp; kp++)
for(int i=0; i<kp; i++) // <<<<<<
M->vvodu();
}
Я так часто писал циклы for что просто перестал обращать на них должное внимание, если бы не вы незнаю сколько бы я еще разглядывал этот нехитрый код.
есть в любом отладчике две волшебные кнопочки, называются Step Into и Step Over (F10, F11 в MSVC++) попробуй как-нть на досуге :)