2

このコードを実行すると、予想される出力が表示されますがsegmentation fault (core dumped)、最後に出力されます。

string str[4] = {
    "Home",
    "Office",
    "Table",
    "Bar"
};

for (int i = 0; i<5; i++)
{
    cout << str[i] << "\n";
}

出力:

Home
Office
Table
Bar
Segmentation fault (core dumped)

セグメンテーション違反 (コア ダンプ) の重要性は何ですか。調べたところ、未割り当てメモリにアクセスしようとすると、そのようなエラーが発生するようですが、上記のコードの何が問題なのですか?

4

6 に答える 6

9

あなたは書くべきです:

for (int i = 0; i<4; i++) //0,1,2,3 = total 4 values
{
    cout << str[i] << "\n";
}
于 2012-06-24T10:53:43.020 に答える
5

C++ 配列は 0 から始まるため、インデックスの範囲が 0 ~ 3 であるため、str[4] にアクセスすることはできません。
長さ 4 の配列を割り当てました。

string str[4]

次に、次の場合にループを終了する必要があります。

i < 4

ではなくi < 5

于 2012-06-24T10:59:09.093 に答える
3

カウンターは 0 から 3 の範囲である必要があります。for ループを修正する必要があります。

于 2012-06-24T10:57:42.277 に答える
3

strは astring[4]であるため、4 つの要素があり、インデックス 0 ~ 3 が有効であることを意味します。インデックス 4 にもアクセスしています。

于 2012-06-24T10:58:59.443 に答える
2

存在しない要素にアクセスしようとしているため、セグメンテーション違反が発生しています。つまりstr[4] 、可能なインデックスは 0 ~ 3 です。

于 2012-08-11T05:39:07.697 に答える
1

配列の終わりを過ぎたデータにアクセスしています。strはサイズ 4 の配列ですが、ループ内の 5 番目の要素にアクセスしているため、seg fault が発生します

于 2012-06-24T10:58:36.220 に答える