تعطل في msvcp90d.dll عند استرداد مقاومة للماء من دفعة :: Tokenizer
-
16-09-2019 - |
سؤال
عندما أسترجع مفتاح بدء التشغيل () 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());
ثم لا يتم طرح أي استثناء.
لا تنتمي إلى StackOverflow