Ошибка сегментации с opendir ()? - PullRequest
0 голосов
/ 13 ноября 2011

Я не могу понять, почему я продолжаю получать эту ошибку сегментации в этой функции Может ли кто-нибудь объяснить мне, как избавиться от этого и заставить мою программу работать ...?

Линия 33: флюс = опендир (путь); Lign 98: ret = listdir (env, stock, pos, stock-> stock_name [stock-> i]);

int     listdir(t_env* env, t_stock* stock, t_pos* pos, char* path)
{
        struct dirent*  dirinfo;
        DIR*            flux;

        init_xy(pos);
        cl_screen(env);

        flux = opendir(path);
        if (flux == NULL)
                return (1);
        alloc_mem(stock);
        stock->i = 0;
        while ((dirinfo = readdir(flux)))
        {
                id_strcpy(stock->stock_name[stock->i], dirinfo->d_name);               
                print_list(env, pos);
                id_print_str(stock->stock_name[stock->i]);
                pos->y = pos->y + 1;
                stock->i = stock->i + 1;
        }
        stock->i = stock->i - 1;
        pos->y = pos->y - 1;
        pos->ymax = pos->y;
        closedir(flux);
        return (0);
}

void    enter(t_env* env, t_pos* pos, t_stock* stock)
{
        int     ret;

        (void)pos;
        cl_screen(env);
        frame(env);
        ret = listdir(env, stock, pos, stock->stock_name[stock->i]);

        ret = 0;
        if (ret == 1)
        {
                free_mem(stock);
                reset_keypress();
                exit(1);
        }
        stock->i = 0;
}

(gdb) where
#0  __opendir (name=0x0) at ../sysdeps/unix/opendir.c:86
#1  0x08048ebb in listdir (env=0xbffff890, stock=0xbffff880, pos=0xbffff86c, path=0x0) at listdir.c:33
#2  0x080494ad in enter (env=0xbffff890, pos=0xbffff86c, stock=0xbffff880) at run_fct.c:98
#3  0x0804930a in press (env=0xbffff890, pos=0xbffff86c, stock=0xbffff880, arrows=0xbffff82d "\n") at run_fct.c:51
#4  0x080491db in run (env=0xbffff890, pos=0xbffff86c, stock=0xbffff880) at run_fct.c:25
#5  0x08048985 in main (argc=2, argv=0xbffff954) at main.c:35

1 Ответ

1 голос
/ 13 ноября 2011

Ваша обратная трассировка показывает, что вы передаете NULL в качестве параметра name в opendir().Это не сработает.Похоже, ваша stock структура данных в enter() не заполнена тем, что вы ожидаете.В частности, stock->stock_name[stock->i] - это NULL в то время, когда вы совершаете неудачный вызов на opendir().

...