std::ostringstream
От: Аноним  
Дата: 18.01.08 20:01
Оценка:
вот фрагмент кода:

    std::ostringstream oss;
    DWORD pause = PROCESS_INFO_INTERVAL;
    unsigned    cnt(0);
    const std::string cur_dir(GRES().LogDir());
    FILE*  fp;

    while (true)
    {
        oss.str("");
        oss << cur_dir << ('\\' == cur_dir[cur_dir.length() - 1] ? "_" : "\\_") << cnt++ << '_' << PROCESS_INFO_FNAME;


все вроде бы работало нормально, пока не подключил сторонний отладчик, а он орет в этом месте следущее:
Dangling Pointer: Pointer 0x01EE9260, allocated by global_operator_new, has already been freed.


это стек вызовов до места ошибки:
basic_streambuf<char,struct std::char_traits<char> >::eback    streambuf    170
basic_stringbuf<char,struct std::char_traits<char>,class std::allocator<char> >::overflow    sstream    131
basic_streambuf<char,struct std::char_traits<char> >::sputc    streambuf    148
operator<<<char,struct std::char_traits<char>,class std::allocator<char> >    string    566
CreateProcessLogingThread    resources.cpp    26
threadstartex    threadex.c    241
    kernel32.dll    0x0000B680


в моем коде это фактически строка:
oss << cur_dir << ('\\' == cur_dir[cur_dir.length() - 1] ? "_" : "\\_") << cnt++ << '_' << PROCESS_INFO_FNAME;


которая (если не обращать внимание на этот дебагер) дает правильный резульат.

Я еще многого не понимаю, поэтому прошу помочь. Скажите насколько серьезно предупреждение этого дебагера и почему студия сама не видит произошедшей ошибки?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.