निम्नलिखित कोड पर विचार करें। विंडोज पर जबकि (आईडीई प्रयोग किया है: Visual C++) यह नहीं है:व्यवहार में अंतर (जीसीसी और विजुअल सी ++)
#include <stdio.h>
#include <vector>
#include <iostream>
struct XYZ { int X,Y,Z; };
std::vector<XYZ> A;
int rec(int idx)
{
int i = A.size();
A.push_back(XYZ());
if (idx >= 5)
return i;
A[i].X = rec(idx+1);
return i;
}
int main(){
A.clear();
rec(0);
puts("FINISH!");
}
मैं कारण है कि कोड लिनक्स पर एक विभाजन गलती (Code::Blocks आईडीई प्रयोग किया जाता) देता है यह पता लगाने नहीं कर सका।
जब मैंने वास्तव में समस्या की जांच करने के लिए वालग्रिंड का उपयोग किया, तो मुझे this output मिला।
मुझे चार अलग-अलग स्थानों पर Invalid write of size 4
मिला। फिर जब मैंने विज़ुअल सी ++ का उपयोग किया तो कोड क्रैश क्यों नहीं हुआ?
क्या मुझे कुछ याद आ रही है?
क्या आपको इसका उपयोग करने से पहले वेक्टर में पर्याप्त जगह आवंटित नहीं करना है?यह शुद्ध दुर्घटना है, या संभवतः सिर्फ एक अलग, तर्कसंगत रूप से अधिक दोस्ताना लेकिन कम मानक, 'वेक्टर <>' के कार्यान्वयन। –
आप जिस आईडीई का उपयोग कर रहे हैं वह बहुत उपयोगी जानकारी नहीं है। आप जिस प्रासंगिक कंपाइलर का उपयोग कर रहे हैं उसके कौन से संस्करण अधिक उपयुक्त हैं। –
@ डेनिस: मैंने जीसीसी 4.3 और एमएसवीसी ++ 2008 –