два объекта этого класса и присвоил каждому в поле 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; Тут не прокатит
 Myrrrca
                          
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Myrrrca
                          
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  из за того, что для указателя нет значения по умолчанию?
Скорее что он не инициализируется согласованно неявно, да.
Обсуждают сегодня