ошибки сегментации с помощью string.h в очередь - PullRequest
0 голосов
/ 09 февраля 2012

Извините, но вопрос не мог понять, какие функции использовать здесь. http://www.cplusplus.com/reference/string/string/

собирался преобразовать в c-string и написать целый беспорядок кода, но держу пари, что есть хороший способ сделать это.

Просто пытаясь добавить A, B и C в конец строки и добавить ее в очередь, продолжайте получать ошибку сегментации, которая заканчивается функцией ?? () после string :: assign () (согласно отладчику) )

string a, b, c;
a = s.append("A");
b = s.append("B");
c = s.append("C");

q.add(a);
q.add(b);
q.add(c);

это также заканчивается ошибкой сегментации.

q.add(s + "A");
q.add(s + "B");
q.add(s + "C");

Также проблема в том, что он использует старый, поэтому я получу:

teststringA
teststringAB
teststringABC

вместо ожидаемого

teststringA
teststringB
teststringC

1 Ответ

0 голосов
/ 09 февраля 2012

Что такое ошибка сегментации?

Когда ваша программа работает, она имеет доступ к определенным частям памяти.Во-первых, у вас есть локальные переменные в каждой из ваших функций;они хранятся в стеке.Во-вторых, у вас может быть некоторая память, выделенная во время выполнения (используя 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.....
...