コードには、特にInitialize_My_String_Array
に多くの問題があります。
void Initialize_My_String_Array (My_String_Array[30720])
{
string Initialization_Values[]={"A","B","C","D","E"};
int Index=0;
int i=0;
int j=0;
while (i<=30719){
My_String_Array[i]=Initialization_Values[Index];
i++;
j++;
if (j=6144){
j=0;
Index++;
}
}
}
- あなたのメソッドのシグネチャが正しくありません。変数
My_String_Array[30720]
を宣言しましたが、その型を指定していません。文脈から、タイプはstd::string
であると考えられます。
if
の文では、if(j = 6144)
と書いてあります。 =
は等価演算子ではなく、代入演算子です。 ==
は等価演算子です。あなたのコードでは、6144をj
に割り当ててから、ゼロ以外の値をブール値に昇格させると、ifステートメントが常に実行されます。つまり、Index
は常に増加します。ループの5回の反復の中でIndex
はInitialization_Values
のサイズを超えて増加し、未定義の動作が発生し、場合によってはアクセス違反が発生します。コンテキストに基づいて
、私は修正されたコードは次のようになりますと思う:この向こう
//Type is now correctly defined.
void Initialize_My_String_Array (string My_String_Array[30720])
{
string Initialization_Values[]={"A","B","C","D","E"};
int Index=0;
int i=0;
int j=0;
while (i<=30719){
My_String_Array[i]=Initialization_Values[Index];
i++;
j++;
if (j == 6144){
j=0;
Index++;
}
}
}
、あなたはこのコードを書いた方法を見直し、いくつかの時間を費やす必要があります。 Cスタイルの配列は、一般的にC++での悪い習慣とみなされています。なぜなら、あなたのコードは理由についての完璧なケーススタディです。 C++ std::array
オブジェクトははるかに優れており、このようなコードでは優先する必要があります。さらに、インデックスと配列境界を含むスパゲッティコードに夢中になりました。それを扱うもっと良い方法があります。
void Initialize_My_String_Array (std::array<std::string, 30720> & My_String_Array)
{
const std::array<std::string, 5> Initialization_Values{"A","B","C","D","E"};
const size_factor = (My_String_Array.size()/Initialization_Values.size());
for(size_t index = 0; index < My_String_Array.size() && (index/size_factor) < Initialization_Values.size(); index++) {
My_String_Array[index] = Initialization_Values[index/size_factor];
}
}
int main(int argc, char* argv[]) {
std::array<std::string, 30720> My_String_Array;
Initialize_My_String_Array (My_String_Array);
for(std::string const& s : My_String_Array) {
std::cout << s << std::endl;
}
system("pause");
return 0;
}
もう一つ:私はこのコードのより良いバージョンであることを考えるもの書いたコード内のどこかで、あなたはusing namespace std;
のようなものを書いています。それを取り除く。 It's bad practiceとあなたが適切にC++を学んでいくつかの時間を費やす必要があり、他のユーザ(「がstring
されたカスタムタイプやstd::string
?」)
のために解釈するコードが難しくなります。ここに表示されるコードには、かなり重大な構文エラーが含まれています。 – Xirema
2つの配列がアクセスされています - どちらが問題になっていますか? – UKMonkey
@ Xiremaはあなたの答えに感謝しますが、あなたは何が構文エラーですか? – Abdelrahman