【发布时间】:2011-04-22 11:17:52
【问题描述】:
作为一个从未处理过释放内存等问题的人,我的任务是创建一个动态结构数组并创建函数来添加或删除数组元素。删除时我必须释放不再需要的内存。
删除大小为 3 的数组的第二个元素时,我将第三个元素移动到第二个位置,然后删除最后一个。删除最后一个时,总是出错...有没有人可以为我找到解决方案?
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。 -
对于据说使用字符数组的任务。但也许这会改变。尽管如此,这并不能解决真正的问题:(;)
-
您将必须跟踪从
new和delete返回的每个指针,准确一次。您还必须跟踪从new []返回的每个指针,并在该指针上只使用一次delete[]。猜猜为什么我们更喜欢向量和字符串!
标签: c++ arrays memory delete-operator