为什么这个程序会给出分段错误。我正在为20个字符串分配内存。 (默认情况下也是20)。并设置并尝试访问第20个元素。
#include <iostream>
using namespace std;
class myarray
{
private:
string *items;
public:
myarray (int size=20)
{
items = new string[size];
}
~myarray()
{
delete items;
}
string& operator[] (const int index)
{
return items[index];
}
/*
void setvalue (int index, string value)
{
items[index] = value;
}
string getvalue (int index)
{
return items[index];
}
*/
};
int main()
{
myarray m1(20);
myarray m2;
m1[19] = "test ion";
cout << m1[19];
//m1.setvalue (2, "Devesh ");
//m1.setvalue (8, "Vivek ");
//cout << m1.getvalue(19);
return 0;
}
答案 0 :(得分:7)
如果您像使用new string[size]
一样分配数组,则需要使用delete[] items;
答案 1 :(得分:3)
使用delete[]
代替delete
。
new
分配了内存,请将其与delete
一起免费使用。new[]
分配了内存,请将其与delete[]
一起免费使用。答案 2 :(得分:1)
将构造函数更改为:
items = new string[size]();
析构函数:
delete[] items;