c++ - std::vector overwriting final value, rather than growing? -


मुझे एक समस्या है जहां vector.push_back (value) का उपयोग करना अंतिम मान को ओवरराइट कर रहा है , अंत के लिए संलग्न करने के बजाय ऐसा क्यों हो सकता है? मेरे पास वेक्टर में एक नमूना आइटम है, इसलिए इसका आकार शून्य में कभी नहीं गिरता है नीचे कोड है ..

<पूर्व> शून्य अपडेटटैबल (वेक्टर & lt; माइस्ट्रेड & gt; * व्यक्तियों, माइस्ट्रेड एंट्री) {MyStruct someEntry; Bool isNewEntry = सच है; के लिए (इंट आई = 0; आई & lt; इंडिविजुज- & gt; आकार (); आई ++) {यदि (! (एसआरसीएमपी (व्यक्तियों-> (आई) पर। एसोसिएशन, एंट्री। स्रोत एड्डर))) {हैनईएनेंट्री = गलत; // धज्जी। यहाँ कुछ काम किया। }} If (isNewEntry) {व्यक्तियों- & gt; पुश_बैक (प्रविष्टि); }}

यह मेरे पहले "नमूना" मूल्य में रहने दें, और वेक्टर में सिर्फ एक और आइटम की अनुमति देगा। <2 p>

संपादन: अधिक कोड, क्योंकि यह स्पष्ट रूप से मुद्दा नहीं है?

 < कोड> शून्य * टैबलेट प्रबंधन (शून्य * आर्ग) {// एनडीपी तालिका में खोजे हुए उपकरणों को स्टोर करने के लिए। // नमूना डेटा की एक पंक्ति के साथ भरा वेक्टर के & lt; MyStruct & gt; discoveryTable; माइस्ट्रेड नमूना; Sample.sourceAddress = "नमूना"; Sample.lastSeen = -1; Sample.beaconReceived = 1; discoveryTable.push_back (नमूना); srand (समय (शून्य)); जबकि (1) {int sleepTime = rand ()% 3; नींद (sleepTime); MyStruct newDiscovery = प्राप्त वैल्यू (); अगर (newDiscovery.lastSeen! = -1000) // प्राप्त value () से कोई नया मान नहीं है (अपडेटटैबल (& amp; DiscoveryTable, newDiscovery); } प्रिंटटेबल (और डिस्कवरीटेबल); } वापसी नल; }  

मैं एक अनुमान को खतरा होने जा रहा हूं:

मान लें कि माइस्ट्रॉक्ट को घोषित किया गया है

  struct mystruct {const char * sourceAddress; // अन्य Gubbins ...};  

और वह प्राप्त वैल्यू ऐसा कुछ करता है

  MyStruct प्राप्त VAT () {स्थिर अक्षर का नाम बफर [MAX_NAME_LEN]; // मूल्य प्राप्त करने के लिए कुछ काम करें, बफर माइस्ट्रॉक्ट में नाम डालें; S.sourceAddress = nameBuffer; // शेष MyStruct रिटर्न की भरें; }  

अब, आपके वेक्टर में धकेल हर संरचना में sourceAddress एक ही वैश्विक बफर की ओर इशारा करते हैं, हर बार जब आप कॉल करते हैं तो ReceivedValue नए स्ट्रिंग के साथ बफर को ओवरराइट करता है - इसलिए आपके वेक्टर में हर प्रविष्टि एक ही स्ट्रिंग के साथ समाप्त हो जाती है।

मुझे अपने बाकी कोड को देखने के बिना सुनिश्चित नहीं किया जा सकता है, लेकिन मुझे यकीन है कि यदि आप अपने प्रश्न के लिए टिप्पणी में कुछ अच्छा सी ++ शैली सुझावों का पालन करें, यह संभावना दूर जाएंगे।

स्पष्टीकरण के लिए संपादित करें: अपने ढांचे को आवंटित करने की कोई आवश्यकता नहीं है, बस स्रोत घोषित करना स्टड :: स्ट्रिंग के रूप में इस संभावना को समाप्त करने के लिए पर्याप्त होगा।


Comments

Popular posts from this blog

sql - dynamically varied number of conditions in the 'where' statement using LINQ -

asp.net mvc - Dynamically Generated Ajax.BeginForm -

Debug on symbian -