1

私はいくつかのコーディングに取り組んでおり、セグメンテーション違反に遭遇しました。私はそれを機能させるために最善を尽くしましたが、失敗し続けました。今、私は助けを求めています。これは私のコードです:

#include <iostream>
#include <string>

using namespace std;

int main()
{

    string symbols = "ABCDEFGHIJKLMNOPRSTUVYZ_";

    int sim, a = 0;

    sim = symbols.size();

    string temp[sim];

    while(sim > 0)
    {
    sim--;

    temp[sim] = symbols.substr(sim, 1);

    cout << temp[sim] << endl;
    }

}

これはちょっとうまくいきますが、いくつかの変更を加えるとクラッシュします。

私が変える:

    while(sim > 0)
    {
    sim--;

    temp[sim] = symbols.substr(sim, 1);

    cout << temp[sim] << endl;
    }

これに:

    while(a < sim)
    {
    a++;

    temp[a] = symbols.substr(a, 1);

    cout << temp[a] << endl;
    }

私は SIGFAULT を取得します。それが間違っていることを本当に理解していません。私はデバッガーを使用しましたが、どの行でクラッシュしたかは実際には表示されません。次のように表示されます。

プログラム受信信号 SIGSEGV、セグメンテーション違反。

__gnu_cxx::__exchange_and_add(int volatile *, int) () ()

4

4 に答える 4

0

さて、temp [a]で明らかですが、より微妙な問題は、a == symがtemp[a]に割り当てた空の文字列を返す場合にsubstr(a、1)を返すことです。これはおそらくクラッシュを引き起こしませんが、それでもエラーです。

于 2012-12-26T19:34:15.173 に答える