Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
0 / 0 / 1
Регистрация: 01.03.2014
Сообщений: 18

Получаю segmentation fault

14.03.2019, 12:47. Показов 1984. Ответов 2

Студворк — интернет-сервис помощи студентам
Всем привет!

Я пишу программу, которая должна по заданному ИД-шнику процесса найти все его процесы-потомки.
Написала с рекурсией, но она завершается segmentation fault.

Не могу понять почему. Помогите, пожалуйста, если что-то для вас в коде ниже очевидно неверно:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <dirent.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
 
int descendant(char *pid, int res, struct dirent **namelist, int n ){
        int files = n;
        char filename[1000];
        while (files--) {
                sprintf(filename, "/proc/%s/stat", namelist[files]->d_name);
                if( access( filename, F_OK ) != -1 ) {
                        FILE *f = fopen(filename, "r");
                        char str1[1000], str2[1000], str3[1000], ppid[1000];
                        fscanf(f, "%s %s %s %s", str1, str2, str3, ppid);
                        if (strcmp(pid, ppid) == 0){
                                res++;
                                res = descendant(str1, res, namelist, n);
                        }
 
                }
                else{
                        continue;
                }
        }
        return res;
}
 
int main (int argc, char *argv[]){
        char *pid = argv[1];
        int result;
        struct dirent **namelist;
        /*сhar filename[1000];*/
        int res = 1;
        int n;
 
        n = scandir("/proc", &namelist, NULL, alphasort);
        if (n == -1) {
                perror("scandir");
                exit(EXIT_FAILURE);
                }
 
        result = descendant(pid, res, namelist, n);
 
        printf("%d\n", result);
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.03.2019, 12:47
Ответы с готовыми решениями:

Segmentation fault
Здраствуйте, написал программу в qt-creator, проект на си без qt ось убунту и решил затестить на своем vds там стоит debian при запуске...

Segmentation fault
После введения размерности программа выдает ошибку Segmentation fault. Помогите исправить #include &lt;stdio.h&gt; int main(int...

Segmentation fault
Вообщем, сделал программу, которая определяет сколько вы пишите слов в минуту(Просто быстро пишите слова, через 60 сек таймер...

2
725 / 224 / 73
Регистрация: 01.03.2011
Сообщений: 643
14.03.2019, 14:14
Лучший ответ Сообщение было отмечено kyra как решение

Решение

На вскидку
1. проверять, что fopen успешен (access() не гарантия)
2. добавить fclose() после fscanf() - сейчас течет и если выйдите за лимит - падение.
3. Маловероятно, но может не хватать стека - проверить ulimit -s и можно порезать массивы с 1000 до вменяемых значений (один из них вообще не нужен.)
4. Проверить результат fscanf, хотя бы на то, что прочитаны все 4 параметра, в идеале проверять корректность прочитанного (например процесс могут звать "foo bar" и %s на этом сломается)
1
0 / 0 / 1
Регистрация: 01.03.2014
Сообщений: 18
14.03.2019, 16:53  [ТС]
Спасибо огромное!

Помог пункт: добавить fclose() после fscanf() - сейчас течет и если выйдите за лимит - падение.

Да, стоит закрывать файлы, вообще, всегда. Но, особенно, если их около 800 в дирректории и посмотреть надо все XD
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.03.2019, 16:53
Помогаю со студенческими работами здесь

Работа с MySQL и segmentation fault
Понадобилось написать модуль, висящий в системе, однако опыта в программировании имею очень мало. Процесс создает пайп, при появлении...

Segmentation fault (core dumped)
Собрал исходники Собралось без ошибок скрин https://cloud.mail.ru/public/BR4P/9wyzETEnW Но при попытке запуска пишет это...

Malloc + free + chdir = segmentation fault
Приветствую всех! Есть такой код (можете меня ругать я пока учусь): #include &lt;stdbool.h&gt; #include &lt;dirent.h&gt; ...

Ошибка Segmentation fault (Core dumped)
Как избавится от ошибки Segmentation fault? Core dumped! на линукс, я предполагаю что это связано с выделениям памяти. #include...

Segmentation Fault при обращении к локальной переменной
Уважаемые эксперты. Простейший код вызывает неожиданный для меня результат. Программа компилируется при помощи cc: Sun C 5.11...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru