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

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

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

Author24 — интернет-сервис помощи студентам
Зарание благодарен за помощ
собственно вот мой код . он должен считывать информацию о процессе с фалйа ,а принимать на вход пид процесса
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
Ответ Создать тему
Новые блоги и статьи
Списки и кортежи в Python: различия, особенности, применение
py-thonny 13.04.2025
Python славится своей гибкостью при работе с данными. В арсенале языка есть две основные последовательные структуры данных, которые программисты используют ежедневно — списки и кортежи. Эти структуры. . .
Middleware в ASP.NET Core
UnmanagedCoder 13.04.2025
В ASP. NET Core термин "middleware" занимает особое место. Что же это такое? Middleware представляет собой программные компоненты, которые формируют конвейер обработки HTTP-запросов в приложении. . . .
Таблицы лута в Unity с MinMaxCurve и AnimationCurve
GameUnited 12.04.2025
Создание сбалансированного лута в играх — задача не из простых. Разработчики постоянно ищут способы настройки систем выпадения предметов, которые будут одновременно справедливыми для игроков и. . .
std::expected в C++: Управление ошибками
bytestream 12.04.2025
Обработка ошибок всегда была важной и одновременно сложной задачей в программировании на C++. На протяжении долгого времени разработчики использовали различные подходы: возвращаемые коды ошибок,. . .
Nullable типы и операторы объединения null в C#
UnmanagedCoder 12.04.2025
Многие шутят, что null — это миллиардная ошибка в программировании. И в этой шутке только доля шутки. Тони Хоар, создатель null-ссылки, сам назвал её своей "ошибкой на миллиард долларов". Почему?. . .
Аутентификация и авторизация JWT в микросервисах с API Gateway
stackOverflow 12.04.2025
В традиционных монолитных приложениях безопасность часто реализуется как единый защитный периметр - пользователь проходит аутентификацию один раз, после чего получает доступ ко всем функциям системы. . . .
TypeScript: Интерфейсы vs Типы
run.dev 11.04.2025
Современная разработка на JavaScript сталкивается с множеством проблем при масштабировании проектов. Типизация кода стала хорошим инструментом, помогающим избежать ошибок во время выполнения,. . .
Управление топиками и разделами Kafka
Javaican 11.04.2025
Apache Kafka — распределенная платформа потоковой передачи данных, которая стала стандартом для построения высоконагруженных систем обмена сообщениями. В современной архитектуре микросервисов,. . .
Миграция монолита в Event-Driven микросервисную архитектуру на C#
stackOverflow 11.04.2025
Монолитная архитектура – классический подход к разработке программного обеспечения. Это приложение, построенное как единое целое, где все компоненты тесно связаны между собой. Большинство проектов. . .
Go в Kubernetes: Управление ресурсами
golander 11.04.2025
Разработчики Go-приложений в Kubernetes часто сталкиваются с неожиданными проблемами производительности и даже внезапными отказами контейнеров. Причина этого кроется в особенностях взаимодействия. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер