यह मुझे थोड़ी देर के लिए परेशान कर रहा है। यह स्थिर और गतिशील स्मृति आवंटन के बीच अंतर की समझ (कमी) के दिल में जाता है। निम्न सरणी एक सामान्य स्थैतिक सरणी है, जिसका अर्थ यह होना चाहिए कि संकलन समय के दौरान स्मृति आवंटित की गई है, सही? फिर भी, मैंने इसे सेट अप किया है ताकि उपयोगकर्ता रनटाइम पर सरणी आकार में प्रवेश कर सके।सरणी स्थिर है, लेकिन सरणी आकार रनटाइम तक नहीं जानता है। यह कैसे संभव है?
#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;
}
नोट को इस कार्यक्रम में कोई new
या delete
ऑपरेटरों देखते हैं कि। यह एक्सकोड 4.2 (डिफ़ॉल्ट क्लैंग कंपाइलर) के साथ-साथ मेरे स्कूल के यूनिक्स सर्वर (जीसीसी 4.4.5) में ठीक काम करता है। कंपाइलर को संकलन समय पर बनाया गया है जब संकलक arr
के लिए आवंटित करने के लिए कितनी स्मृति आवंटित करता है? क्या यह सिर्फ मेरे कंपाइलर, खतरनाक कोड का एक झुकाव है जो अन्य स्मृति को दूषित कर सकता है, या यह कानूनी है?
यह एक सुविधा _variable-लंबाई arrays_ कहा जाता है, जो C99 में पहली बार आया उपयोग करता है। –
'g ++ -Wall -Wextra -pedantic -std = C++ 98' –