【发布时间】:2017-02-22 04:33:13
【问题描述】:
我正在尝试使用顺序列表来实现队列。但是,对于带有字符串元素的队列,程序会崩溃。
下面是 Queue 构造函数的相关部分:
{
string *ptr = new string[num];
}
看了一会儿,我怀疑问题出在析构函数上。在调用析构函数时,我正在删除顺序列表的数组指针并将其设置为 NULL:
{
delete ptr;
ptr = NULL;
}
但是,由于字符串库提供了一个默认析构函数,它会删除字符串,然后我试图删除一个不存在的指针。我认为这将访问不可访问的内存,这会导致分段错误。队列实现非常适合 int 和 double ,就像它目前的状态一样。
我正在为 int、double 和 string 元素类型使用模板。如果析构函数为空,则不会为 int 和 double 元素队列动态释放内存。
除了有一个空的类析构函数并使用默认的字符串析构函数之外,还有什么简单的方法可以解决这个问题?
【问题讨论】:
-
你为什么不使用
std::string?没有必要重写析构函数。如果您的模板适用于int、double,那么它应该适用于std::string,而无需特别需要delete。 -
发布一个最小但完整的示例,读者可以通过复制和粘贴代码并编译它来尝试。
-
Alf - 这个问题与课堂作业的奖金有关,所以我试图更笼统。不过,谢谢你的建议。
-
你有
new[],但没有delete[]。这是一个错误。 -
我正在使用 std::string 并且它确实有效,但我需要修改析构函数。如果我不删除 int 和 double 队列,那会不会导致动态内存的不正确释放?