你的代碼有很多問題,特別是在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,使你的代碼更難解釋爲其他用戶(「是string
自定義類型或std::string
?」)
你需要花一些時間學習正確C++。這裏顯示的代碼包含一些相當重要的語法錯誤。 – Xirema
所以你有2個數組被訪問 - 你有沒有計算出哪個導致你的問題呢? – UKMonkey
@Xirema謝謝你的回答,但是你能指定什麼語法錯誤嗎? – Abdelrahman