2012-04-23 16 views
6

किसी कारण से, मेरे टू चेक चर का मूल्य मिटा दिया जा रहा है और मुझे नहीं पता कि क्यों। कोई सुझाव?मेरी स्ट्रिंग का मूल्य क्यों खो रहा है?

bool 
check(string toCheck){ 
    printf("toCheck: %s\n", toCheck.c_str()); 
    ifstream list; 
    list.open("list.txt"); 
    string temp; 
    while(list){ 
     getline(list,temp); 
     printf("toCheck: '%s' temp: '%s'\n",toCheck.c_str(), temp.c_str()); 
     if(temp == toCheck){ 
      printf("Username exists\n"); 
      return false; 
     } 
    } 
    printf("returning true\n"); 
    return true; 
} 

यहाँ यह क्या पारित किया जा रहा है: TestTrevor

और यहाँ उत्पादन है:

toCheck: TestTrevor 
toCheck: '' temp: 'Trevor' 
toCheck: '' temp: '' 

Username exists 
+1

list.txt की सामग्री क्या हैं? – JohnFx

+0

आपको "list.txt" के माध्यम से कुछ अंधेरे जादू को चैनल करना होगा। – ScarletAmaranth

+0

list.txt को हटा रहा है, और बस temp के लिए कुछ dummyvalues ​​में subbing, आपके कोड मेरे MacbookPro पर अपेक्षित काम करता है। – Alan

उत्तर

4

अपनी टिप्पणी से:

यह डिबग करने के लिए वास्तव में कड़ी मेहनत (यही कारण है कि मैंका उपयोग कर रहा हूँ) क्योंकि मैं फोरिंग कर रहा हूं और प्रक्रियाओं का उपयोग कर रहा हूं (यह एक वीओआईपी प्रोजेक्ट के लिए एक सर्वर है जिस पर मैं काम कर रहा हूं) और जब मैंने बाल प्रक्रिया का पालन करने की कोशिश की तो जीडीबी काम नहीं कर रहा था।

जोर मेरा।

मुझे आश्चर्य नहीं होगा अगर toCheck के लिए गतिशील रूप से आवंटित स्मृति को वास्तव में कभी भी फोर्क प्रक्रिया में नहीं बनाया गया है, या इसे बनाया गया है लेकिन किसी भी तरह से इसे हटा दिया गया है/ओवरराइट किया गया है।

नई जानकारी: अगर मैं getLine(list, temp); पर टिप्पणी करता हूं तो यह toCheck, किसी भी विचार को मिटा नहीं देता है?

यह आपके प्रोग्राम में पहली बार है कि std::allocator वास्तव में स्मृति आवंटित करने की आवश्यकता है।


एसटीएल मन में forking के साथ विकसित की है कभी नहीं किया गया, तो यह पूरी तरह से संभव है की तुलना में यह बस इस USECASE में काम नहीं करता।

आप यह जांच सकते हैं कि डीबगर के साथ क्या चल रहा है। toCheck के लिए स्मृति को किस पते पर आवंटित किया गया है और temp के लिए मेमोरी आवंटित होने पर क्या होता है, लेकिन यह गहरी डाइविंग है।

चूंकि ऐसा लगता है कि आपको gdb के साथ समस्याएं हैं, तो आप पहले पते को डंप करने का प्रयास कर सकते हैं (printf("%x", &toCheck[0]);)।

संबंधित मुद्दे