Problem Pointer being freed was not allocated c++

0

Czesc, ponizej kod ktory wyrzuca mi blad jak w temacie?
Animals.h:

Animals();
Animals(const int dirSize);
~Animals(void);

Animals.cpp:

using namespace std;

Animals::Animals() {}

Animals::Animals(const int dirSize):dirSize(dirSize) {
animals = new Animal[dirSize];
}

Animals::~Animals(void) {
delete[] animals;
}

0

Dwie sprawy.
Alokujesz pamięć tylko w jednym konstruktorze, a co z drugim?

Animals::~Animals(void) 

O ile pamiętam standard określa że destruktor nie powinien mieć żadnych argumentów to void jest zbędne.

0
  1. W domyślnym konstruktorze nie ustawiasz wartości wskaźnika na null, więc późniejszy destruktor wywoła UB.
  2. Możliwe, że gdzieś kopiujesz klasę i łamiesz regułę 3/5/0
  3. Nie używaj nagiego new i delete: https://dsp.krzaq.cc/post/176/ucze-sie-cxx-kiedy-uzywac-new-i-delete/
0
kq napisał(a):
  1. W domyślnym konstruktorze nie ustawiasz wartości wskaźnika na null, więc późniejszy destruktor wywoła UB.
  2. Możliwe, że gdzieś kopiujesz klasę i łamiesz regułę 3/5/0
  3. Nie używaj nagiego new i delete: https://dsp.krzaq.cc/post/176/ucze-sie-cxx-kiedy-uzywac-new-i-delete/

Dałbyś radę napisać tutaj kawałek kodu, który to zrobi ?
Byłbym wdzięczny

1

Animals::Animals() :animals{nullptr} {}

2. http://en.cppreference.com/w/cpp/language/rule_of_three

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