Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

"Мистическое" зависание

29K
11 июля 2008 года
Existor
20 / / 03.07.2008
Поставил перед собой задачу научиться грамотному ООП.
И для этого решил написать программу "морской бой".
Компиллирую g++ом.
В самом начале столкнулся с проблемой зависания в конструкторе класса "Korabl".
Отладчик (gdb) при пром запуске ничего не говорит.
Подскажите, где я напутал?

Код:
#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;
}
443
11 июля 2008 года
REmindER
292 / / 23.03.2003
Да, kp+1 - это классно. И вправду - мистика...
1.9K
11 июля 2008 года
max_dark
256 / / 11.11.2005
Код:
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();
}
29K
11 июля 2008 года
Existor
20 / / 03.07.2008
Да, такого я от себя не ожидал!
Я так часто писал циклы for что просто перестал обращать на них должное внимание, если бы не вы незнаю сколько бы я еще разглядывал этот нехитрый код.
6.8K
21 июля 2008 года
Аццкий программер
91 / / 27.11.2006
есть в любом отладчике две волшебные кнопочки, называются Step Into и Step Over (F10, F11 в MSVC++) попробуй как-нть на досуге :)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог