为什么这个c ++程序给出了seg错误

时间:2014-04-03 11:48:38

标签: c++

为什么这个程序会给出分段错误。我正在为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;
}

3 个答案:

答案 0 :(得分:7)

如果您像使用new string[size]一样分配数组,则需要使用delete[] items;

答案 1 :(得分:3)

使用delete[]代替delete

经验法则是:

  • 如果您使用new分配了内存,请将其与delete一起免费使用。
  • 如果您使用new[]分配了内存,请将其与delete[]一起免费使用。

答案 2 :(得分:1)

将构造函数更改为:

items = new string[size]();

析构函数:

delete[] items;