2011-04-04 16 views
5

मैं कुछ कोड का उपयोग करने की कोशिश कर रहा हूं जिसे मैंने दूसरे कंप्यूटर पर लिखा था जो एक स्ट्रिंग को टोकन में विभाजित करता है। यह कोड ठीक संकलित करता है। कोड कुछ अन्य कंप्यूटरों के इरादे के रूप में भी काम करता है। मैं कोड निम्नलिखित करने के लिए नीचे कम करने के लिए प्रबंधित किया है:बूस्ट रेगेक्स रनटाइम त्रुटि

#include <string> 
#include <boost/regex.hpp> 

typedef std::vector<std::string> token_t ; 

token_t generate_tokens(std::string raw_input){ 
//this function breaks a input string into tokens. So test 100 goes to 2 tokens "test" and "100". 

    boost::regex re_splitter("\\s+"); //this uses the regex \s+ to find whitespace. The + finds one or more whitespace characters. 

    boost::sregex_token_iterator iter(raw_input.begin(), raw_input.end(), re_splitter, -1); 
    //this breaks the string using the regex re_splitter to split into tokens when that is found. 
    boost::sregex_token_iterator j; //This is actually in the Boost examples, j is the equivalent of end. Yes this did also seem weird to me at first... 

    token_t token_vector; 
    unsigned int count = 0; 
    while(iter != j) 
    { 
     token_vector.push_back(*iter); 
     std::cout << *iter++ << std::endl; 
     ++count; 
    } 
    return token_vector; 
} 

int main(){ 
    std::string in; 
    int amount = -1; 

    std::cout << "action: "; 
    std::getline(std::cin, in); 

    boost::regex EXPR("^test \\d*(\\.\\d{1,2})?$"); 
    bool format_matches = boost::regex_match(in, EXPR); 

    token_t tokens = generate_tokens(in); 

    if(format_matches){ 
     amount = atoi(tokens.at(1).c_str()); 
    } 
    std::cout << "amount: " << amount << "\n"; 
    return 0; 
} 

यह त्रुटि या चेतावनी का उपयोग किए बिना संकलित: g++ -Wall test.cpp -lboost_regex लेकिन जब इनपुट test 100 प्रोग्राम विफल उपलब्ध कराने के क्रम में इस्तेमाल किया।

कार्रवाई: परीक्षण 100

a.out: /usr/local/include/boost/smart_ptr/shared_ptr.hpp:412: typename बढ़ावा :: विस्तार :: shared_ptr_traits :: संदर्भ बढ़ावा :: shared_ptr :: ऑपरेटर *() const [टी = बूस्ट :: regex_traits_wrapper>>] के साथ: दावा 'px! = 0' विफल रहा।

गर्भपात

मैं पूरी तरह से यहाँ क्या हो रहा है के रूप में खो दिया हूँ

। क्या यह मेरे कोड में या लाइब्रेरी में एक बग है? डीबगिंग के लिए कोई सलाह बहुत सराहना की है!

+1

आप किस प्रकार का बढ़ावा दे रहे हैं? वह कोड और इनपुट एमएसवीसी 2010 एसपी 1 और बूस्ट 1.46.1 – ildjarn

उत्तर

-1

चूंकि आप अपने कोड में shared_ptr का उपयोग नहीं कर रहे हैं, और मैं कोई अन्य सामान नहीं देख सकता जो गलत दिखता है और यह अन्य मशीनों पर काम करता है, मैं कहूंगा कि यह बूस्ट में एक बग है। रेगेक्स।

मुझे लगता है कि अन्य मशीनों में बूस्ट के अन्य संस्करण स्थापित हैं?

अगर मुझे लगता है कि मैं पहले std::cout << *iter++ << std::endl; लाइन को बदलने की कोशिश करता हूं। ->std::cout << *iter << std::endl; ++iter;

और हाँ, इसे स्विस सुझाए गए डीबगर में चलाएं, और देखें कि दावा कहां ट्रिगर किया गया है।

+0

के साथ ठीक चला गया मैंने सुझाव दिया और मुझे एक ही समस्या मिली। – shuttle87

+0

ठीक है, यह सिर्फ एक जंगली अनुमान था। जैसा कि स्विस और मैंने पहले से ही सुझाव दिया है: जीडीबी (या कोई अन्य डीबगर) को फायर करें और देखें कि वह कहां है() ट्रिगर किया गया है। फिर वहां से जाओ। यदि यह Boost.Regex में एक बग है, तो आपको यह जांचना चाहिए कि यह अभी भी नवीनतम संस्करण में है (1.46 मुझे लगता है) और यदि ऐसा है, तो एक बग रिपोर्ट सबमिट करें। –

0

इसे जीडीबी, या कुछ समान प्रोग्राम में चलाएं, इन वर्गों की शुरुआत में ब्रेकपॉइंट सेट करें, फिर जब तक आपको अपमानजनक रेखा न मिल जाए तब तक कदम उठाएं।

आपको जो त्रुटि मिल रही है वह एक अमान्य सूचक की तरह दिखता है कहीं बूस्ट लाइब्रेरी में पास किया जा रहा है।

8

यह एक बग नहीं है। यह बढ़ावा हेडर फ़ाइलों का संघर्ष है।

यह गलत फ़ाइल समावेशन के कारण हो सकता है, या गलत लाइब्रेरी समावेशन के कारण हो सकता है (रेगेक्स मॉड्यूल कुछ बूस्ट मॉड्यूल में से एक है जिसे संकलन की आवश्यकता है)।

आप सुनिश्चित करें कि आप, उदा -l और मैं स्विच का उपयोग करके सही फ़ाइलों का उपयोग कर रहे हैं .:

g++ -W -Wall main.cpp $(LDFLAGS) -lboost_regex -I/data1/PROJECT_SEARCH/libsrc/boost_1_46_1 
4

यह होता है जब आप एक बढ़ावा संस्करण से हेडर के साथ संकलन और एक अन्य को बढ़ावा देने संस्करण के साथ अमल करना चाहिए। आपको जांचना चाहिए कि निष्पादन के लिए कौन सी लाइब्रेरी बूस्ट स्थापित है, और जिसे आप संकलन के लिए उपयोग करते हैं।

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