Не понимаю, откуда появляется ошибка 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
→ Ссылка
Как минимум:
- Неинициализированная переменная
size. - Попытка удаления неудаляемого :) - литерала
"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;
}