string.h进入队列的分段错误

时间:2012-02-09 06:30:52

标签: c++ string segmentation-fault

抱歉,noob问题无法确定在这里使用哪些功能。 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 :(得分:0)

What is a segmentation fault?

程序运行时,它可以访问内存的某些部分。首先,您在每个函数中都有局部变量;这些都存储在堆栈中。其次,你可能有一些内存,在运行时分配(使用malloc,用C或新的,在C ++中),存储在堆上(你也可以听到它叫做“免费商店”)。您的程序只允许触摸属于它的内存 - 前面提到的内存。该区域外的任何访问都将导致分段错误。分段错误通常称为段错误。

你的第二个问题是

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.....