當我試圖運行此我得到一個分段錯誤:局部數組變量的最大大小
#define FILE_NAME "test.html"
#define STRING_ARRAY_SIZE 1000000
int main() {
fstream file;
string line = "";
string string_array [STRING_ARRAY_SIZE];
int i = 0;
file.open(FILE_NAME);
while(getline(file, line)) {
string_array[i] = line;
i++;
cout << line << endl;
}
file.close();
}
相反,當我嘗試編譯這一點,它的工作原理:
#define FILE_NAME "test.html"
#define STRING_ARRAY_SIZE 100000
int main() {
fstream file;
string line = "";
string string_array [STRING_ARRAY_SIZE];
int i = 0;
file.open(FILE_NAME);
while(getline(file, line)) {
string_array[i] = line;
i++;
cout << line << endl;
}
file.close();
}
原來,唯一的區別是數組的大小。爲什麼它在100000時工作,而不是在1000000時?什麼是最大尺寸?謝謝。
將局部變量(包括數組)放在堆棧上,該堆棧的大小有限。在使用VC++的Windows上,默認情況下爲1MB,在Linux上通常爲8MB。試圖在堆棧上分配更多的數據將導致*堆棧溢出*,這會導致未定義的行爲並且很可能導致崩潰。數組中最大數量的成員不是固定的,而是取決於數據的大小和剩餘的堆棧大小。 –
在編譯期間,你真的得到了分段錯誤**嗎?這意味着編譯器會有一個錯誤,或者類似缺陷的內存......可能不是,但它可以更清楚地說明問題。 –
ups你們是對的。運行時發生分段錯誤:) – user3289157