Как человек, никогда не занимавшийся освобождением памяти и прочим, передо мной встала задача создать динамический массив структур и создать функции для добавления или удаления элементов массива. При удалении я должен освободить память, которая больше не нужна.
при удалении 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