Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.59/22: Рейтинг темы: голосов - 22, средняя оценка - 4.59
18 / 18 / 7
Регистрация: 07.11.2010
Сообщений: 136

Ошибка сегментации

11.12.2011, 16:22. Показов 4743. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Зарание благодарен за помощ
собственно вот мой код . он должен считывать информацию о процессе с фалйа ,а принимать на вход пид процесса
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
#include <stdlib.h>
#include <algorithm>
#include <iostream>
#include <stdio.h>
#include <string.h>
 
 
using namespace std;
 
int main(int argc, char* argv[])
{
    FILE* f = fopen(strcat("/proc/",strcat(argv[1],"/stat")),"r+");
 
    int pid;
    char comm [100] ;
    int  state;
    int tty_nr;
    long unsigned int utime;
    long double cutime;
    long double ld;
 
    fscanf(f,"%d ,%s, %c, %d, %lu, %lu, %ld, %ld,",&pid, &comm, &state, &tty_nr, &utime, &cutime, &ld);
    printf("%d ,%s ,%c ,%d ,%lu ,%lu ,%ld ,%ld",&pid, &comm, &state, &tty_nr, &utime, &cutime, &ld);    
    return 0;
}
в консоле запускал g++ ошибок не выдавал .... только много предупреждений
создал бинарник
g++ -o pi pi.c
запускаю
./pi 1490
и тут появляютса эта ошибка(
Может кто знает в чем проблема? в линуксе я плохой кодер((
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.12.2011, 16:22
Ответы с готовыми решениями:

Ошибка сегментации
Здравствуйте, написал программу, запускаю- Windows пишет: &quot;обнаружена ошибка. Приложение будет закрыто&quot;. Ошибка в функции: ...

Ошибка сегментации
Здравствуйте. Скажите, почему так делать нельзя? class A { public: A* array; //массив A() { //Ошибка...

ошибка сегментации
где может быть ошибка?

9
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
11.12.2011, 16:28
Цитата Сообщение от mansp Посмотреть сообщение
только много предупреждений
они не просто так пишутся
вот по поводу попытки изменить константную строку в
Цитата Сообщение от mansp Посмотреть сообщение
strcat("/proc/",strcat(argv[1],"/stat")),"r+");
наверняка было написано

к тому же все проблемы решаются дебаггером - gdb + backtrace
1
18 / 18 / 7
Регистрация: 07.11.2010
Сообщений: 136
11.12.2011, 16:43  [ТС]
Цитата Сообщение от alex_x_x Посмотреть сообщение
они не просто так пишутся
вот по поводу попытки изменить константную строку в

наверняка было написано
да нет по поводу этого ничего не было
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
pi.c: В функции «int main(int, char**)»:
pi.c:12:57: предупреждение: deprecated conversion from string constant to «char*» [-Wwrite-strings]
pi.c:22:94: предупреждение: format «%s» expects argument of type «char*», but argument 4 has type «char (*)[100]» [-Wformat]
pi.c:22:94: предупреждение: format «%c» expects argument of type «char*», but argument 5 has type «int*» [-Wformat]
pi.c:22:94: предупреждение: format «%ld» expects argument of type «long int*», but argument 8 has type «long double*» [-Wformat]
pi.c:22:94: предупреждение: format «%ld» expects argument of type «long int*», but argument 9 has type «long double*» [-Wformat]
pi.c:23:91: предупреждение: format «%d» expects argument of type «int», but argument 2 has type «int*» [-Wformat]
pi.c:23:91: предупреждение: format «%s» expects argument of type «char*», but argument 3 has type «char (*)[100]» [-Wformat]
pi.c:23:91: предупреждение: format «%c» expects argument of type «int», but argument 4 has type «int*» [-Wformat]
pi.c:23:91: предупреждение: format «%d» expects argument of type «int», but argument 5 has type «int*» [-Wformat]
pi.c:23:91: предупреждение: format «%lu» expects argument of type «long unsigned int», but argument 6 has type «long unsigned int*» [-Wformat]
pi.c:23:91: предупреждение: format «%ld» expects argument of type «long int», but argument 7 has type «long double*» [-Wformat]
pi.c:23:91: предупреждение: format «%ld» expects argument of type «long int», but argument 8 has type «long double*» [-Wformat]
Добавлено через 9 минут
изменил 1 строку

C++
1
 FILE* f = fopen(argv[1],"r+");
сейчас после запуска бинарника выдает это
Code
1
���4(�$�(  ,-1076988404 ,3217978896 ,-1076988448 ,-1076988432oleg@ubuntu:~$
хотя жаль что первый вариант не сработал
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
11.12.2011, 16:54
Цитата Сообщение от mansp Посмотреть сообщение
да нет по поводу этого ничего не было
было
Цитата Сообщение от mansp Посмотреть сообщение
deprecated conversion from string constant to «char*»
Цитата Сообщение от mansp Посмотреть сообщение
хотя жаль что первый вариант не сработал
заведите отдельный буфер для конкатенации строк
1
18 / 18 / 7
Регистрация: 07.11.2010
Сообщений: 136
11.12.2011, 17:07  [ТС]
ещо один вопрос как сделать что бы мне выводились нормальные цыфри а не то что выводит у меня
когда я напрямую смотрю информацию о процесе
Code
1
2
cat /proc/1490/stat
1490 (pulseaudio) S 1 1489 1489 0 -1 4202560 2713 0 12 0 14 301 0 0 9 -11 3 0 3006 100052992 1435 4294967295 134512640 134588612 3217033200 3217032252 14570518 0 0 3674112 19011 4294967295 0 0 17 0 0 0 16 0 0
а при помощи моего кода должно вывести первые 7 чисел а выводятса непонятно что
Code
1
���4(�$#� ,� ,-1074014500 ,3220952800 ,-1074014544 ,-1074014528
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
11.12.2011, 17:18
mansp,
во-первых нужны проверки:
1) fopen вернул не NULL
2) fscanf вернул 7 (число запрашиваемых параметров)

во-вторых вы зря игнорируете warnings

Цитата Сообщение от mansp Посмотреть сообщение
pi.c:23:91: предупреждение: format «%d» expects argument of type «int», but argument 2 has type «int*» [-Wformat]
компилятор явно говорит, что вы в printf вместо int'a пытаетесь передать int*
компилятор вам все ошибки нашел
0
12 / 12 / 0
Регистрация: 31.10.2011
Сообщений: 35
11.12.2011, 20:56
1. Неправильно получаете адрес файла. Не мучайтесь с конкатенацией, попробуйте с sprintf
Code
1
2
char filename[20];
sprintf (filename, "/proc/%s/stat", argv[1]);
2. Вы открываете файл с параметром "r+". Этот параметр определяет, что файл открывается для чтения и записи. А писать в этот файл могут только привилегированные процессы, запускаемые от рута, поэтому открываться в таком виде данный файл не будет. Пишите просто
Code
1
FILE * f = fopen (filename, "r");
3. Неправильно передаете аргументы в printf, Передавать надо не адреса численных переменных, а их самих
Code
1
printf("%d ,%s ,%c ,%d ,%lu ,%lu ,%ld ,%ld",pid, comm, ........);
0
18 / 18 / 7
Регистрация: 07.11.2010
Сообщений: 136
13.12.2011, 14:24  [ТС]
я уже это исправил и изменил код но правильно считывает только первое значение тоесть пид процеса
хотя все типы данных куда я записываю соответствуют спецификации файла stat

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
#include <stdlib.h>
#include <algorithm>
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <fstream>
 
 
using namespace std;
 
int main(int argc, char* argv[])
{
    FILE* f = fopen(argv[1],"r");
    int pid;
    char comm [25];
    int ppid;
    int state;
    int pgrp;
    int session;
    int tty_nr ;
    int tpgid;
    long unsigned int flags;
    long unsigned int minflt;
    long unsigned int cminflt;
 
    fscanf(f,"%d ,%s, %d, %d, %d, %d, %d, %d, %lu, %lu, %lu",&pid, &comm[0], &ppid , &state, &pgrp, &session ,&tty_nr ,&tpgid, &flags, &minflt,&cminflt);
    printf("%d ,%s, %d, %d, %d,%d, %d, %d,%lu,%lu,%lu", pid, comm, ppid , state, pgrp, session ,tty_nr, tpgid, flags, minflt ,cminflt);
 
    return 0;
}
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
13.12.2011, 14:28
"%d ,%s, %c, %d, %lu, %lu, %ld, %ld,"
"1490 (pulseaudio) S 1 1489 1489 0"
если не секрет: где во второй строке запятые?
0
12 / 12 / 0
Регистрация: 31.10.2011
Сообщений: 35
13.12.2011, 14:49
В fscanf в строке уберите запятые
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.12.2011, 14:49
Помогаю со студенческими работами здесь

Ошибка сегментации.
Здравствуйте, дорогие форумчане! Тут такое дело, есть программа, код приведен ниже, там есть некоторый массив D. После компиляции...

Ошибка сегментации
int main() { int mas; } Объясните, почему такой код привод к ошибке? (компилятор VS 2012)

ошибка сегментации
Всем привет! Я никогда не программировал, а тут решил склепать небольшую программку. Да вот только не могу понять почему выскакивает...

Ошибка Сегментации
Всем привет! При выполнении кода вылетает ошибка: &quot;Ваша программа вызвала нарушение доступа(ошибку сегментации)&quot;. Как это...

Ошибка сегментации из ниоткуда
Суть программы составить матрицу смежности, затем найти вершину с наименьшей степенью. Проблема в том, что код, который заключен в...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru