wskaźniki

0

witam,
piszę rodzaj monitora do synchronizacji dostępu do sektorów krytycznych i mam pewien problem:
mianowicie chciałem aby użytkownik podawał obiekt do wstawienia i żeby ten obiekt był wstawiany do listy w moim monitorze. Podczas próby odpalenia zamieszczonego poniżej kodu program się wysypuje, nie wyskakują żadne błędy ani warningi.

 template <class monitorClass>
class Monitor
{
protected:
    ConditionVariable full;
    ConditionVariable isEmpty;
    monitorClass* objectList;
    int firstEmpty,monitorSize;

public:
    Monitor(int monitorSize)
    {
        this->monitorSize = monitorSize;
        this->firstEmpty = 0;
        objectList = new monitorClass[monitorSize];

    }
    void insertElem(monitorClass* elem)
    {
        objectList[firstEmpty] = *elem;
    }

    monitorClass removeElem()
    {

    }
    bool fullMonitor()
    {
        if(firstEmpty >= monitorSize)
        {
            return 1;
        }
        return 0;
    }



};




int main()
{
    Monitor<int> mon(2);
    int* a;
    a=(int*)3;
    mon.insertElem(a);



    return 0;
}
0
 int* a;
 a=(int*)3;
 // ...
 objectList[firstEmpty] = *elem;

Próbujesz dereferencji wskaźnika który wskazuje na komórkę o adresie 0x3. To czego ty się spodziewałeś?

Jak tak bardzo chcesz mieć wskaźnik w insertElem to musisz posiadać wskaźnik, który zawiera poprawny adres. Możesz to zrobić na przykład tak:

 int a = 3;
 mon.insertElem(&a);
0

Ideą tego kodu było zeby móc tworzyć monitory różnych klas np
jak zrobić aby moja koncepcja działała dobrze ?

 
class kon
{
private:
    int l;
public:
    kon(int l)
    {
        this->l=l;
    }
    int getL()
    {
        return l;
    }

};



template <class monitorClass>
class Monitor
{
protected:
    ConditionVariable full;
    ConditionVariable isEmpty;
    monitorClass* objectList;
    int firstEmpty,monitorSize;

public:
    Monitor(int monitorSize)
    {
        this->monitorSize = monitorSize;
        this->firstEmpty = 0;
        objectList = new monitorClass[monitorSize];

    }
    void insertElem(monitorClass* elem)
    {
        objectList[firstEmpty] = *elem;
    }

    monitorClass* removeElem()
    {

    }
    bool fullMonitor()
    {
        if(firstEmpty >= monitorSize)
        {
            return 1;
        }
        return 0;
    }



};


int main()
{
    Monitor<kon> mon(2);
    mon.insertElem(new kon(2));



    return 0;
}

0

dostaję taki błąd

screenshot-20161223231223.png

0

Podaj kod zamiast screenów, bo nie wiadomo, która to jest 89 linia.

0

@Smutny Pomidor, zapewne klasa kon nie posiada domyślnego konstruktora, który jest potrzebny tu:

Monitor(int monitorSize)
{
        ...
        objectList = new monitorClass[monitorSize]; //<---
}

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