Jag har ett problem med en C++-uppgift. Jag har fyra klasser Library, Item (abstrakt basklass), Book (ärver Item) och Command. Library innehåller en dynamisk Item-array, och för varje nytt Command skickas en referens till samma Library med. Ungefär såhär (förenklat):
Första gången addBook tillkallas (genom doCommand) går allt som det ska. Andra gången däremot kraschar programmet så fort det kommer till raden markerad med "här" (i första iterationen av for-loopen). Varför händer detta, och vad kan jag göra för att förhindra det?
(och i verkligheten har Library redan en del Items innan Command-loopen i main, därför blir if-satsen i addBook sann)
Kod:
// library.h #include<item.h> #include<book.h> class Library { public: Library() : size(0) {} ~Library() {delete[] items;} addBook() { Item** items2 = new Item*[size+1] if (numOfItems > 0) { for (int i = 0; i < size; i++) { items2[i] = items[i]; // här! } delete[] items; } items2[size] = new Book(); items = items2; size++; } private: Item** items; int size; }; // command.h #include<library.h> class Command { public: Command(Library& library) : library(library) {} ~Command() {} void doCommand() { library.addBook() } private: Library library; }; // main.cpp #include <library.h> #include <command.h> int main() { Library* library = new Library(); for (int i = 0; i < 50; i++) { Command* command = new Command(*library); command->doCommand(); } return 0; }
Första gången addBook tillkallas (genom doCommand) går allt som det ska. Andra gången däremot kraschar programmet så fort det kommer till raden markerad med "här" (i första iterationen av for-loopen). Varför händer detta, och vad kan jag göra för att förhindra det?
(och i verkligheten har Library redan en del Items innan Command-loopen i main, därför blir if-satsen i addBook sann)