утечки памяти при использовании sprintf
От: Rat Россия  
Дата: 31.05.11 03:52
Оценка:
Всем привет!

использую 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ей студии если это важно
Re: утечки памяти при использовании sprintf
От: baf  
Дата: 31.05.11 11:58
Оценка:
Здравствуйте, 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
Re: утечки памяти при использовании sprintf
От: achp  
Дата: 31.05.11 12:01
Оценка:
Здравствуйте, 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>


В данном примере всё чисто. Нужен минимальный пример, воспроизводящий проблему.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.