Всем привет!
использую sprintf для вывода чисел в строку в многопоточном приложении. отладчик показывает утечки памяти при каждом вызове sprintf.
не подскажите ли как устранить эту проблему?
вот типичный пример использования:
void func ( unsigned char * some_ptr )
{
char buf [40];
std::string str;
str = "some words ";
sprintf ( buf, "%i", *(some_ptr) );
str += buf;
}
компилятор 2003ей студии если это важно
Здравствуйте, Rat, Вы писали:
Rat>вот типичный пример использования:
Rat>Rat>void func ( unsigned char * some_ptr )
Rat>{
Rat>char buf [40];
Rat>std::string str;
Rat>str = "some words ";
Rat>sprintf ( buf, "%i", *(some_ptr) );
Rat>str += buf;
Rat>}
Rat>
Может быть отладчику не нравиться, то что unsigned char используется как int, sprintf не проверяет соответсвия типов списка аргументов, потому что их может быть сколь угодно много и их обработка идёт с помощью макроса. Таким образом *(some_ptr) интерпретируется как int и захватывает лишние байты. Попробуйте так:
sprintf ( buf, "%i", int(*(some_ptr)) );
или используете std::stringstream
или boost::format
Здравствуйте, Rat, Вы писали:
Rat>Rat>void func ( unsigned char * some_ptr )
Rat>{
Rat>char buf [40];
Rat>std::string str;
Rat>str = "some words ";
Rat>sprintf ( buf, "%i", *(some_ptr) );
Rat>str += buf;
Rat>}
Rat>
В данном примере всё чисто. Нужен минимальный пример, воспроизводящий проблему.