LinuxForum.Fans
Тема

Ошибка в использовании функции mmap в С

Автор: nadya_shakh 22 сообщений 4553 просмотров
#321487

Нашел как минимум одну ошибку, приводящую к Segmentation fault. К mmap() отношения не имеет.

text

void rdf1_separate_streams(unsigned char* rdf, [b]unsigned char* streams[/b]){
...
//Далее по ходу функции под указатель [b]streams[/b] не выделяется память, но в конце мы видим
    *streams = str_out_1;
    *(streams + 1) = str_out_2;
//Соответственно, память должна выделяться вызывающей функцией.
...
}

Смотрим на вызывающую функцию:

text

int rdf1_open(char* path, time_t* start_time, char* channels, rdr_mode_t* rdr_mode){
...
    unsigned char *ptr_in, *ptr_out;
...
    //Здесь под [b]ptr_out[/b] тоже память не выделяется, но далее
        rdf1_separate_streams(ptr_in, ptr_out);
    /*Соответственно, в функцию [b]rdf1_separate_streams()[/b] передается не   инициализированный указатель, который эта функция пытается разыменовать. Отсюда и Segfault.*/
...
}
#321542

Merzley,
огромное спасибо! Я поправила в соответствии с Вашими замечаниями (инициализировала указатель ptr_out), и ошибка сегментирования исчезла!
Теперь буду особенно обращать на инициализацию указателей внимание, чтобы не пропустить чего-то похожего! Просто пока я новичок в С, это моя первая программа (не считая "Hello, world!"). Еще раз большое спасибо за помощь!! Вы реально мне очень помогли.

Войдите или зарегистрируйтесь, чтобы ответить.