Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > Ошибка с памятью


Автор: virusman 5.6.2005, 17:44
Что это означает?
Код

*** glibc detected *** free(): invalid next size (fast): 0x10cc2720 ***

Вылетает после успешного выполнения функции
Код

void CNWNXFunction::GetRecentBic(char *value)
{
    char filename[255];
    char dirpath[255];
    sprintf(dirpath, "servervault/%s", value);
    Log(3,"Dirpath: %s\n",dirpath);
    DIR* mydir;
    mydir=opendir(dirpath);
    if(!mydir)
    {
        Log(1,"Cannot open directory.\n");
        value="";
        return;
    }
    dirent* dirf;
    time_t lasttime=0;
    char lastfile[255];
    while(dirf = readdir(mydir))
    {
        struct stat filestat;
        sprintf(filename, "%s/%s", dirpath, dirf->d_name);
        Log(3,"Checking file: %s\n",filename);
        if(stat(filename, &filestat)==0)
        {
            if(filestat.st_mtime > lasttime) sprintf(lastfile, "%s", filename);
        }
    }
    closedir(mydir);
    Log(3,"Resulting file: %s\n",lastfile);
    sprintf(value, "%s", lastfile);
    Log(3,"Done.");
}

Опытным путем установлено, что рушится только если есть sprintf(lastfile, "%s", filename) (строка 25).

Автор: achmed 5.6.2005, 18:10
Наверное память расстреливается.
( предположу, что длина полного пути файла получается >> 255,
портится указатель mydir, а функция closedir пытает что-то сделать
по этому указателю; Вообще надо пользоваться отладчиком, чтобы
такие баги отлавливать.)

Автор: virusman 5.6.2005, 18:14
Цитата
предположу, что длина полного пути файла получается >> 255

Нет, она меньше.
Цитата
портится указатель mydir, а функция closedir пытает что-то сделать по этому указателю

Без closedir было то же самое. Да и mydir вряд ли может испортиться.

Автор: achmed 5.6.2005, 18:37
Приведи листинг лога твое программы.
Добавлено @ 18:39
Это бага glibc

https://bugzilla.redhat.com/beta/show_bug.cgi?id=150647

рекомендую посмотреть в Google.

Автор: virusman 5.6.2005, 18:48
Цитата
Это бага glibc

https://bugzilla.redhat.com/beta/show_bug.cgi?id=150647

рекомендую посмотреть в Google.

Мда.. ну и фича. Спасибо. smile

Цитата
Приведи листинг лога твое программы.

Как?
Дело еще в том, что это .so, который подключается еде одним .so. smile
Добавлено @ 18:49
Опа.. Без проверки glibc он просто и ясно вылетает с сегфолтом. smile

Автор: achmed 5.6.2005, 19:09
Цитата
Как?


Я вижу там вызов какой-то функции логирования, хотя, теперь это уже неважно ...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)