Program sie kompiluje jednak podczas wykonywania zawiesza

0

Witam mam problem z takim kodem

//cow.h
#ifndef COW_H
#define COW_H


class Cow
{
    private:
        char name[20];
        char * hobby;
        double weight;
    public:
        Cow();
        Cow(const char * nm, const char * ho, double wt);
        Cow(const Cow &c);
        ~Cow();
        Cow & operator=(const Cow & c);
        void ShowCow() const;       //wyswietla wszystkie dane obiektu
};

#endif // COW_H
 
//cow.cpp
#include "cow.h"
#include <cstdlib>
#include <cstring>
#include <iostream>

using namespace std;

Cow::Cow()
    {
        name[0] = '\0';
        hobby = '\0';
        weight = 0.0;
    }

Cow::Cow(const char * nm, const char * ho, double wt)
    {
        strncpy(name, nm, 19);
        strcpy(hobby, ho);
        weight = wt;
    }

void Cow::ShowCow() const
    {
        cout<<"Imie: "<<name<<endl;
        cout<<"Hobby: "<<hobby<<endl;
        cout<<"Waga: "<<weight<<endl;
    }

Cow::~Cow()
    {
    }

 
//main.cpp
#include <iostream>
#include "cow.h"

using namespace std;

int main()
{
    Cow obiekt("Dawid", "Informatyka", 65.12);
    obiekt.ShowCow();
    return 0;
}
 

Jeszcze nie wszystkie metody mam napisane ale już występuje problem z tym że program się kompiluje bez błędów ale zawiesza podczas wykonywania, odkryłem że problem tkwi w pliku cow.cpp w konstruktorze w linijce strcpy(hobby, ho); gdyż jeśli ją usunę program wykonuje się bez problemów, mimo tego jednak nie wiem co zrobić aby kod poprawić i aby działał dobrze

0

char * hobby;
to oznacza że hobby jest WSKAŹNIKIEM! Nigdzie temu wskaźnikowi nie przydzielasz żadnej PAMIĘCI! A potem jeszcze przypisujesz do niego stały ciag znaków '/0' a potem próbujesz ten STAŁY ciąg znaków zmieniać. Tragedia!

1 użytkowników online, w tym zalogowanych: 0, gości: 1