Не понимаю, откуда появляется ошибка bad_alloc

#include <iostream>
 using namespace std;
#include <cstddef> // size_t
#include <cstring> // strlen, strcpy

struct String {
    


    /* Реализуйте этот метод. */
    void append(String &other){
  char* temp=new char[this->size+other.size+1];
  strcpy(temp,this->str);
  strcat(temp,other.str);
  this->str=temp;
  delete[] temp;
 }

    size_t size=5;
    char *str="hello";
};
int main(){
    String p1,p2;
    String &p3=p2;
    cout<<(*p1.str);
    p1.append(p3);
    cout<<(*p1.str);
 return 0;
}

Запускаю программу, но она закрывается с ошибкой bad_alloc


Ответы (1 шт):

Автор решения: Harry

Как минимум:

  1. Неинициализированная переменная size.
  2. Попытка удаления неудаляемого :) - литерала "Hello:.

Вот:

#include <iostream>
#include <cstring>

using namespace std;

struct String
{
    String(const char * s = ""):str(new char[strlen(s)+1])
    {
        strcpy(str,s);
    }
    String(const String& s):str(new char[strlen(s.str)+1])
    {
        strcpy(str,s.str);
    }
    ~String() { delete [] str; }

    String& operator =(const String& s) = delete; // Пока, чтоб не возиться

    void append(const String & s)
    {
        char * temp = new char[strlen(str) + strlen(s.str) + 1];
        strcpy(temp,str);
        strcat(temp,s.str);
        delete[]str;
        str=temp;
    }
    char *str;
};

int main()
{
    String p1("first"), p2("second");
    String &p3=p2;
    cout << p1.str << endl;;
    p1.append(p3);
    cout << p1.str << endl;
}
→ Ссылка