Что такое ошибка сегментации?
Когда ваша программа работает, она имеет доступ к определенным частям памяти.Во-первых, у вас есть локальные переменные в каждой из ваших функций;они хранятся в стеке.Во-вторых, у вас может быть некоторая память, выделенная во время выполнения (используя malloc, в C, или new, в C ++), хранящаяся в куче (вы также можете услышать, что это называется «free store»).Ваша программа может касаться только той памяти, которая принадлежит ей - памяти, упомянутой ранее.Любой доступ за пределами этой области вызовет ошибку сегментации.Ошибки сегментации обычно называют сегментами ошибок.
ваша вторая проблема
q.add(s + "A"); // appends A to s hence teststringA
q.add(s + "B"); // teststringA + B hence teststringAB
q.add(s + "C"); //teststringAB + C hence teststringABC
см. Документ на http://www.cplusplus.com/reference/string/string/append/
Append to string
The current string content is extended by adding an additional appending string at its end.
The arguments passed to the function determine this appending string:
string& append ( const string& str );
Appends a copy of str.
пример
// appending to string
#include <iostream>
#include <string>
using namespace std;
int main ()
{
string str;
string str2="Writing ";
string str3="print 10 and then 5 more";
// used in the same order as described above:
str.append(str2); // "Writing "
str.append(str3,6,3); // "10 "
str.append("dots are cool",5); // "dots "
str.append("here: "); // "here: "
str.append(10,'.'); // ".........."
str.append(str3.begin()+8,str3.end()); // " and then 5 more"
str.append<int>(5,0x2E); // "....."
cout << str << endl;
return 0;
}
Вывод:
Writing 10 dots here: .......... and then 5 more.....