Ошибка сегментации (ядро сброшено), массив строк и указатель - PullRequest
0 голосов
/ 21 ноября 2018

Я компилирую и запускаю в Ubuntu.Я работаю над классом, который имеет: string * p1 и является двухэлементным динамическим массивом объектов типа string.У меня работают классы, и проблема в том, что когда я запускаю программу, у меня появляется результат: «Ошибка сегментации (ядро сброшено)».Один из способов, как я пытался это исправить, это изменение p1, я переименовал его: string p1 [2];Все, что я могу сказать, - факт, что это начало работать, но я просто серьезно выяснил, что вызвало проблему.[Я удалил фрагменты кода оператора, чтобы сделать его более понятным.]

class K2;
class K1{
private: 
    string *p1; // the problem is here, if I change it to p1[2]; it works!

public:
K1() {p1[0]=p1[1];}
K1(string a, string b)   {p1[0]=a, p1[1]=b;}
K1(const string (&p)[2]) {p1[0]=p[0], p1[1]=p[1];}
  string& operator[] (size_t i)  ;
  const string& operator[] (size_t i) const ;

friend class K2;
};

ostream& operator<<(ostream& _out, const K1& _p1)
{   _out<<_p1[0]<<" "<<_p1[1];  return _out;    }

class K2{
private:
    K1 p1;
double p2;
public:
K2(): p1("brak", "brak"), p2(0.0){}
K2(string _p11, string _p12, double _p2): p1(_p11, _p12), p2(_p2){}
K2(const K2& kopia): p1(kopia.p1), p2(kopia.p2){ p1=kopia.p1; p2=kopia.p2; }
    K2& operator= (const K2& kopia)
    {if(this!=&kopia)
    { p1=kopia.p1;  p2=kopia.p2;  }
    return *this;
    }

friend ostream& operator<<(ostream& _out, const K2& _p2);
~K2() {}
};

ostream& operator<<(ostream& _out, const K2& _p2)
{   _out<<_p2.p1<<" "<<_p2.p2;  return _out;    }

int main(int argc, char* argv[])
try
{
K2 ob1, ob2;
if(argc!=1) throw 1;
const K2* wsk1 = new K2("kawa", " z mlekiem", 4.50);
const K2 ob3(*wsk1);
delete wsk1;
wsk1=0;
const K2 * wsk2 = new K2(ob3);
ob2 = *wsk2;
cout << ob1 <<"\n"<<*wsk2<<"\n";
delete wsk2;
wsk2 = 0;

cout<< ob2<<"\n";
}

У вас есть идеи, почему это происходит?И как это исправить в коде?Мне нужно посмотреть, как это делается, если что-то трудно понять, просто скажите мне, и я отвечу, что я имел в виду.

...