【发布时间】:2014-05-03 18:06:46
【问题描述】:
我试图在 C++ 上编写我自己的 List 类。
代码如下:
template <class T>
class List
{
private:
T *value, *valueHelper;
int valueSize;
public:
int size;
List()
{
valueSize = 2;
value = new T[valueSize];
size = 0;
}
void Add(T val)
{
size++;
if (size > valueSize)
{
valueSize *= 2;
valueHelper = new T[valueSize];
memcpy(valueHelper, value, sizeof(T) * (size - 1));
delete[](value);
value = valueHelper;
}
value[size - 1] = val;
}
void Clear()
{
delete[](value);
size = 0;
valueSize = 2;
value = new T[valueSize];
}
T & operator[](int P)
{
return value[P];
}
};
当我在此列表类上使用类变量时出现了问题。 当我清除以删除一些内存时,出现运行时错误。
我试图检查导致此问题的原因,我发现函数 Clear() 上的这一行是错误行:
delete[](value);
我不明白,为什么?
【问题讨论】:
-
可能是多次删除?顺便说一句,还有什么特别的错误? (哇,我的每日(否决)投票限制已达到 ;-( ...)
-
你是如何使用那个代码的?
-
重现问题的 T 类型是什么?
-
您的
delete[]中的哪个 电话? -
某些类型(std::string 通常是一种)不一定能很好地处理 memcpy 并破坏原始对象。你测试的是什么类型的?
标签: c++ arrays memory delete-operator