Здравствуйте, тут такая проблема: использую boost::format следущим видом:
...
std::string str = boost::str (boost::format ("%04d") % 1);
...
так вот этот вот 'boost::format ("%04d")' вылетает по AV.
тестовый примерчик:
#include <iostream>
#include <string>
#include "boost/format.hpp"
int main () {
std::string str = boost::str (boost::format ("%04d") % 1);
std::cout << str << std::endl;
return 0;
};
работает как часы.
потрассировал исходный вариант, валится внутри STLPort::ctype::is
bool is(mask __m, char __c) const
{ return ((*(_M_ctype_table+(unsigned char)__c)) & __m) != 0; }
отличия в сгенерированом из ctype::is коде следущие:
исходный вариант:
bool is(mask __m, char __c) const
{ return ((*(_M_ctype_table+(unsigned char)__c)) & __m) != 0; }
004A0000 push ebp
004A0001 mov ebp,esp
004A0003 push ecx
004A0004 mov dword ptr [ebp-4],0CCCCCCCCh
004A000B mov dword ptr [ebp-4],ecx
004A000E movzx eax,byte ptr [__c]
004A0012 mov ecx,dword ptr [this]
004A0015 mov edx,dword ptr [ecx+0Ch]
004A0018 mov eax,dword ptr [edx+eax*4] // <-- AV
004A001B and eax,dword ptr [__m]
004A001E neg eax
004A0020 sbb eax,eax
004A0022 neg eax
004A0024 mov esp,ebp
004A0026 pop ebp
004A0027 ret 8
тестовый примерчик:
bool is(mask __m, char __c) const
{ return ((*(_M_ctype_table+(unsigned char)__c)) & __m) != 0; }
10002180 push ebp
10002181 mov ebp,esp
10002183 push ecx
10002184 mov dword ptr [ebp-4],ecx
10002187 movzx eax,byte ptr [__c]
1000218B mov ecx,dword ptr [this]
1000218E mov edx,dword ptr [ecx+8]
10002191 mov eax,dword ptr [edx+eax*4]
10002194 and eax,dword ptr [__m]
10002197 neg eax
10002199 sbb eax,eax
1000219B neg eax
1000219D mov esp,ebp
1000219F pop ebp
100021A0 ret 8
подскажите, плз, куда копать