Сбой перегруженной функции оператора

0

Здесь я написал 2 перегруженных оператора:

stringb operator+(const stringb &a,const stringb &b)
{
    stringb temp;
    temp.len = a.len + b.len;
    temp.p=new char[(temp.len)+1];
    strcpy(temp.p, a.p);
    strcat(temp.p, b.p);
    return (temp);
}
stringb operator-(const stringb &a,const stringb &b)
{
    stringb temp;
    temp.len=a.len-b.len;
    temp.p=new char[temp.len+1];
    strcpy(temp.p,a.p);
    return (temp);
}

Однако, когда я компилирую фактический код, весь код работает, за исключением части, когда я вызываю этот оператор, и я получаю мусор из put. Что не так с моими функциями?

EDIT: Объявление класса stringb:

class stringb
{
    public:
        char *p;
int len;
public:
    stringb()
    {
    len=0;
    p=0;
    }
stringb(const char *s)
{
    len=strlen(s);
    p=new char[len+1];
    strcpy(p,s);

}
stringb(const stringb &s)
{
    len=s.len;//strlen(s);
    p=new char[len+1];
    strcpy(p,s.p);
}
~stringb()
{
    delete p;
}

friend int operator==(const stringb &a,const stringb &b);
friend stringb operator+(const stringb &a,const stringb &b);
friend stringb operator-(const stringb &a,const stringb &b);
friend void putstring(const stringb a);

};
  • 3
    Объявление stringb пожалуйста
  • 0
    WTH это stringb , не могли бы вы показать это, пожалуйста!
Показать ещё 3 комментария
Теги:
operator-overloading

2 ответа

2

Ваша проблема здесь:

~stringb()
{
    delete p; // <<<<<
}

Это будет выполнено, если temp выходит за пределы области определения вашего оператора.

Чтобы заставить ваш код работать, вам нужна правильная реализация правила 3 в вашем классе stringb. Вы также можете посмотреть этот хороший IDE один образец, P0W имеет настройку из вашего кода.

  • 0
    я должен удалить это? удаление его приводит к сбою кода.
  • 0
    Нет! Вам нужно будет реализовать правильное правило 3 в stringb
Показать ещё 7 комментариев
0

Попробуйте вернуть ссылку:

stringb& operator+(const stringb &a, const stringb &b);
{
   stringb *temp = new stringb();
   temp->len = a.len + b.len;
   [...]
   return *(temp);
}
  • 0
    Сделал это: stringb *temp = new stringb; temp->len = a.len - b.len; temp->p=new char[temp->len+1]; strcpy(temp->p,ap); return *(temp); Все еще падает.
  • 0
    Кажется, ошибка в реализации -operator. + работает просто отлично.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню