Като човек, който никога не се е занимавал с освобождаване на памет и т.н., получих задачата да създам динамичен масив от структури и да създам функции за добавяне или изтриване на елементи от масив. При изтриване трябва да освободя паметта, която вече не е необходима.
когато изтривам 2-ри елемент от масив с размер 3, премествам 3-тия елемент на 2-ра позиция и след това изтривам последния. При изтриване на последното винаги ми излиза грешка... Има ли някой, който да ми намери решение?
struct myFriend {
myFriend() {
number=0;
hobbys = new char*[10];
}
int number;
char* name;
char** hobbys;
};
int main() {
myFriend* friendList = new myFriend[10];
myFriend* tempFriend = new myFriend;
tempFriend->number=1;
tempFriend->name = "ABC";
myFriend* tempFriend2 = new myFriend;
tempFriend2->number=2;
tempFriend->name = "XYZ";
myFriend* tempFriend3 = new myFriend;
tempFriend3->number=3;
tempFriend3->name = "123";
friendList[0] = *tempFriend;
friendList[1] = *tempFriend2;
friendList[2] = *tempFriend3;
friendList[1] = friendList[2]; //move 3rd element on 2nd position
delete &(friendList[2]); //and delete 3rd element to free memory
}
std::vector
иstd::string
. - person sharptooth   schedule 22.04.2011new
иdelete
точно веднъж. Също така трябва да следите всеки указател, върнат отnew []
, и да използватеdelete[]
върху този указател точно веднъж. Познайте защо повече харесваме вектор и низ! - person Bo Persson   schedule 22.04.2011