topcoderで見つかった古い問題を解決しようとしています。私はすぐに文字列の配列の要素の数を見つけることに取り組んでいます。ここに私のコードです文字列配列の要素数をカウントする際にセグメンテーションエラーが発生するC++
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string>
using namespace std;
class MiniPaint {
private:
size_t numLines;
public:
int leastBad(string picture[], int maxStrokes) {
numLines = 0;
while (!picture[numLines].empty()) {
numLines++;
}
cout << numLines << '\n';
return 0;
}
};
int main() {
MiniPaint instance;
string picture[] = {"BBBBBBBBBBBBBBB", "WWWWWWWWWWWWWWW", "WWWWWWWWWWWWWWW", "WWWWWBBBBBWWWWW"};
instance.leastBad(picture, 10);
return 0;
}
このコードは私にセグメンテーションフォールトを与えます。何かが間違っている、コードは要素の数を数える機能のために少し過剰ですが、私はクラスを拡張してより多くの機能を追加したいと思っています。誰かがここで間違っていることを説明できるなら、私は感謝します!前もって感謝します。
編集:私は、whileループで
cout << picture[numlines] << '\n';
によってコードを展開配列の実際の要素を示すために、最初の4つの適切な文字列が表示され、その後、何らかの形でそれが無限端にスペースを印刷。だから、問題は
picture[4].empty()
は絵だけで四つの要素を持っているにもかかわらず、trueを返していないという事実のどこかにあります。
実際に配列の最後を読み込むための 'empty()'文字列はありません。 –
picture [4]は5番目の要素を返します。これは配列にはありません。 C/C++配列のインデックスは0から始まります。あなたは未知のメモリにアクセスしています。プログラムは文字列であり、実際にはそうではないことを示すempty()関数を呼び出しています。 –
文字列リテラルから作成された配列だけに自動的に終了標識が与えられます。 – molbdnilo