تعطل في msvcp90d.dll عند استرداد مقاومة للماء من دفعة :: Tokenizer

StackOverflow https://stackoverflow.com/questions/1677693

سؤال

عندما أسترجع مفتاح بدء التشغيل () BOOBOST () مزيد من المزامنة :: Tokenizer، أحصل على تعطل في MSVCP90D.DLL، الذي يقول "قائمة مكرر"، والتي تبدو مشكلات تشبه المشكلات التي قمت بتشغيلها من قبل مع إشارة مترجم _has_iterator_deBugging، ولكن أنا لقد تحققت من أن برنامجي يجمع مع إيقاف تشغيل هذا العلم.

هنا هو البرنامج:

#include <sstream>
#include <boost/tokenizer.hpp>
#include <boost/algorithm/string.hpp>


int main(int argc, char* argv[])
{
    std::string data("gobo;wimbley;red;moki;boober");
    std::ostringstream input;
    input << data;


    std::string mystr(input.str());
    boost::char_separator<char> separator(";");
    boost::tokenizer<boost::char_separator<char>> tok(mystr, separator);
    boost::tokenizer<boost::char_separator<char>>::iterator iter = tok.begin();
}

ومن المثير للاهتمام، إذا استبدلت بمثابة مثيل المرحز بالطرق التالي، فإنه يعمل:

    boost::tokenizer<boost::char_separator<char>> tok(data, separator);

لذلك يبدو أن شيئا يتعلق ب Ostringstream. أيه أفكار؟

هل كانت مفيدة؟

المحلول

هنالك خطأ في Visual C ++ مع std::ostringstream متى _HAS_ITERATOR_DEBUGGING معطل.

إذا كنت أتذكر بشكل صحيح، std::string نسخ المنشئ نسخ المحامي. يمكنك التغلب على هذا باستخدام std::string تحويل بناء أخذ char* في حين أن.

إذا قمت بتغيير

std::string mystr(input.str());

ل

std::string mystr(input.str().c_str());

ثم لا يتم طرح أي استثناء.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top