2012-02-09 4 views
0

残念ながら、noobの質問では、ここで使用する関数を特定できませんでした。 http://www.cplusplus.com/reference/string/string/string.hを使用したセグメント化エラーがキューに入りました

コードをC-ストリングに変換して全体的なコードを書くつもりでしたが、これを行うには良い方法があります。

文字列の最後に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 
+3

あなたの問題を示す[*完全な例](http://sscce.org/)を投稿してください。投稿したコードに問題はありません。 –

+2

私には見えないのは、sが定義されている場所だけです。私たちにそれを見せてもらえますか? –

+0

標準ライブラリ 'std :: string'を使用している場合は、 ''ではなく ''を含める必要があります。あなたが 'std :: queue'を使っているようには見えないので、キューコードも投稿してください。 – Blastfurnace

答えて

0

What is a segmentation fault?

を期待し、メモリの特定の部分にアクセスできます。まず、各関数にローカル変数があります。これらはスタックに格納されます。次に、ランタイム中に割り当てられたメモリがあります(malloc、C言語、またはC++のnewを使用)。ヒープに格納されます(「フリーストア」とも呼ばれることがあります)。あなたのプログラムはそれに属しているメモリ、つまり先に言及したメモリに触れることしか許されていません。その領域外にアクセスすると、セグメンテーション違反が発生します。セグメンテーションフォルトは、一般にセグメンテーションフォルトと呼ばれます。

あなたの第二の問題は、

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..... 
関連する問題