Điều này đã gây phiền hà cho tôi một thời gian. Nó đi vào trung tâm của sự hiểu biết của tôi (thiếu) về sự khác biệt giữa phân bổ bộ nhớ tĩnh và động. Mảng sau đây là một mảng tĩnh bình thường, có nghĩa là bộ nhớ được cấp phát trong thời gian biên dịch, đúng không? Tuy nhiên, tôi đã thiết lập nó để người dùng nhập kích thước mảng vào thời gian chạy.Mảng là tĩnh, nhưng kích thước mảng không biết cho đến khi chạy. Sao có thể như thế được?
#include <iostream>
using namespace std;
int main() {
cout << "how many elements should the array hold? ";
int arraySize;
cin >> arraySize;
int arr[arraySize];
for (int i = 0; i < arraySize; ++i)
arr[i] = i * 2;
return 0;
}
Lưu ý rằng không có nhà điều hành new
hoặc delete
nào trong chương trình này. Nó hoạt động tốt trong Xcode 4.2 (trình biên dịch Clang mặc định) cũng như máy chủ UNIX của trường tôi (GCC 4.4.5). Trình biên dịch biết bao nhiêu bộ nhớ để phân bổ cho arr
khi mảng được tạo tại thời gian biên dịch? Đây có phải chỉ là một fluke của trình biên dịch của tôi, mã nguy hiểm có thể làm hỏng bộ nhớ khác, hoặc là legit này?
này sử dụng một tính năng gọi là _variable dài arrays_, được ra mắt tại C99. –
Thử biên dịch bằng 'g ++ -Wall -Wextra -pedantic -std = C++ 98' –