два объекта этого класса и присвоил каждому в поле char* str адрес на какой то динамический массив из символов. затем пытаюсь заменить значения в char массиве первого объекта на значения из второго. в чем ошибка?
class String
{
public:
char* m_str;
int m_sizee;
String(const char* str_)
{
m_sizee = strlen(str_);
m_str = new char[m_sizee];
for (int i = 0; i < m_sizee; ++i)
{
m_str[i] = str_[i];
}
}
String() = default;
void print()
{
std::cout << m_str << " size is: " << m_sizee << std::endl;
}
String replaceStr(String str1)
{
for (int i = 0; i < str1.m_sizee; ++i)
{
this->m_str[i] = str1.m_str[i];
}
//this->m_str = str1.m_str;
}
~String()
{
delete[] m_str;
}
};
int main()
{
String str1("aboba");
String str2 = "bababooey";
str1.print();
str2.print();
str1.replaceStr(str2);
str1.print();
return 0;
}
strlen() - длина строки без учета терминатора.
Второй момент - копирование, которое сейчас double-free дает, поскольку по умолчанию.
Извини, но String() = default; Тут не прокатит
из за того, что для указателя нет значения по умолчанию?
Скорее что он не инициализируется согласованно неявно, да.
Обсуждают сегодня