Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 02.06.2014
Сообщений: 9

Segmentation fault

02.06.2014, 08:13. Показов 1614. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Столкнулся в программе с ошибкой Segmentation fault. Вообще, задача отсортировать данные по одному из параметров, но из-за ошибки я до до написания сортировки не доберусь. Сигнал SIGSEGV отладчик возвращает с указанием на 99 строку:
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#include <iostream>
#include <stdio.h>
#include <cstdio>
#include <cstdlib>
#include <string>
 
using namespace std;
 
int main()
{
    FILE *d;
    struct L
    {
        char n[30];
        float w;
        float c;
        float p;
        float f;
        float ch;
    } *spis;
    int ln,l,m,M,*A;
    unsigned n;
    char **B;
    float **C;
    printf("\n\tДанная программа записывает сведения о продуктах\n\tи организовывает выбор продуктов с содержанием\n\tжиров менее заданного значения.\n");     //Описание
    printf("\nВведите число продуктов: ");     //Задание размера массива
    scanf("%i",&ln);
    spis=new L[ln];
    printf("\nВводите сведения о продуктах:\n");     //Приглашение
    A=new int[ln*6];
    for(l=0,m=0 ; l<ln || m<l*6 ; l++)
    {
        printf("\nНазвание %i-го: ",l+1);
        scanf("%s",spis[l].n);
        A[m++]=sizeof(spis[l].n);
        printf("Вес одного стакана: ");
        scanf("%f",&spis[l].w);
        A[m++]=sizeof(spis[l].w);
        printf("Калорийность: ");
        scanf("%f",&spis[l].c);
        A[m++]=sizeof(spis[l].c);
        printf("Белки: ");
        scanf("%f",&spis[l].p);
        A[m++]=sizeof(spis[l].p);
        printf("Жиры: ");
        scanf("%f",&spis[l].f);
        A[m++]=sizeof(spis[l].f);
        printf("Углеводы: ");
        scanf("%f",&spis[l].ch);
        A[m++]=sizeof(spis[l].ch);
    }
    M=m;
    d=fopen("diet","w");
    for(l=0 ; l<ln ; l++)
    {
        fputs(spis[l].n, d);
        fscanf(d, "%f" ,&spis[l].w);
        fscanf(d, "%f" ,&spis[l].c);
        fscanf(d, "%f" ,&spis[l].p);
        fscanf(d, "%f" ,&spis[l].f);
        fscanf(d, "%f" ,&spis[l].ch);
    }
    fclose(d);
    delete [] spis;
    d=fopen("diet","r");
    B=new char*[M];
    C=new float*[M];
    for(m=0 ; m<M ; )
    {
        B[m]=new char(sizeof(A[m]));
        fgets(B[m] , A[m] , d);
        fseek(d , A[m] , (m=0)? 0 : 1);
        m++;
        C[m]=new float(sizeof(A[m]));
        fread(C[m] , A[m] , 1 , d);
        fseek(d , A[m] , 1);
        m++;
        C[m]=new float(sizeof(A[m]));
        fread(C[m] , A[m] , 1 , d);
        fseek(d , A[m] , 1);
        m++;
        C[m]=new float(sizeof(A[m]));
        fread(C[m] , A[m] , 1 , d);
        fseek(d , A[m] , 1);
        m++;
        C[m]=new float(sizeof(A[m]));
        fread(C[m] , A[m] , 1 , d);
        fseek(d , A[m] , 1);
        m++;
        C[m]=new float(sizeof(A[m]));
        fread(C[m] , A[m] , 1 , d);
        fseek(d , A[m] , 1);
        m++;
    }
    for(m=0 ; m<M ; m++)
    {
        for(n=0 ; n<sizeof(C[m]) ; n++)
        {
            printf("%f",C[m][n]);
        }
        puts(B[m]);
    }
}
Что нужно изменить, чтобы исправить ошибку. Заранее благодарен.

Компилятор:
Qt Creator 3.1.0 (opensource)
Основан на Qt 5.2.1 (MSVC 2010, 32 бита)

ОС:
Windows 7, 64x
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.06.2014, 08:13
Ответы с готовыми решениями:

Segmentation fault
Кусок кода: template &lt;typename Type&gt; class Queue { private: struct Elem { Elem*...

Segmentation fault
Пишу лабу для универа. В общем необходимо использовать только свои функции, никаких, str... подобных функций использовать нельзя. ...

Segmentation fault
При выводе второго объекта на экран объекте, вылетает с ошибкой. segmentation fault(core dumped). #include &lt;iostream&gt; using...

5
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
02.06.2014, 11:50
Здесь что делается?
C++
1
2
3
4
5
6
7
8
9
10
11
    d=fopen("diet","w");
    for(l=0 ; l<ln ; l++)
    {
        fputs(spis[l].n, d);
        fscanf(d, "%f" ,&spis[l].w);
        fscanf(d, "%f" ,&spis[l].c);
        fscanf(d, "%f" ,&spis[l].p);
        fscanf(d, "%f" ,&spis[l].f);
        fscanf(d, "%f" ,&spis[l].ch);
    }
    fclose(d);
0
zzzZZZ...
 Аватар для dzrkot
527 / 358 / 94
Регистрация: 11.09.2013
Сообщений: 2,041
02.06.2014, 11:59
Лучший ответ Сообщение было отмечено Kaster как решение

Решение

зачем вы пользуетесь Си-шными вещами? используйте объекты ifstream/ofstream/fstream , методы read и write,, записали всё в файл сначала, потом считываете по структуре и проверяете удовлетворяет ли она условиям, там проще и нагляднее, чем куча fseek() итп итд , да и запись read/write((char *)&struct, sizeof(size_struct)); выглядит посимпотичнее
1
0 / 0 / 0
Регистрация: 02.06.2014
Сообщений: 9
02.06.2014, 17:03  [ТС]
Цитата Сообщение от alsav22 Посмотреть сообщение
Здесь что делается?
Это запись полей массива структуры в файл.
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
02.06.2014, 17:10
fscanf() - это чтение из файла.
1
0 / 0 / 0
Регистрация: 02.06.2014
Сообщений: 9
15.06.2014, 17:35  [ТС]
Цитата Сообщение от dzrkot Посмотреть сообщение
используйте объекты ifstream/ofstream/fstream , методы read и write
- Спасибо, это оказалось очень полезно.
Цитата Сообщение от alsav22 Посмотреть сообщение
fscanf() - это чтение из файла.
- Долго краснел из-за этого.

Конечный код (если интересно):
Кликните здесь для просмотра всего текста
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#include <iostream>
#include <stdio.h>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <fstream>
#include <cmath>
 
using namespace std;
 
int main()
{
    ifstream read;
    ofstream write;
    struct L
    {
        char n[30];
        float w;
        float c;
        float p;
        float f;
        float ch;
    } *spis;
    int ln,l,k,m,com,d,ffat;
    unsigned j;
    char **B,**C,*p,fats[10];
    printf("||Программу составил студент группы РИ-130501\n||Доронин Всеволод\n");     //Заставка
    printf("\n\tДанная программа записывает сведения о продуктах\n\tи организовывает выбор продуктов с содержанием\n\tжиров менее заданного значения.\n");     //Описание
    printf("\nВведите число продуктов: ");     //Задание размера массива
    scanf("%i",&ln);
    spis=new L[ln];
    printf("\nВводите сведения о продуктах:\n");     //Приглашение
    for(l=0 ; l<ln ; l++)
    {
        printf("\nНазвание %i-го: ",l+1);
        scanf("%s",spis[l].n);
        printf("Вес одного стакана: ");
        scanf("%f",&spis[l].w);
        printf("Калорийность: ");
        scanf("%f",&spis[l].c);
        printf("Белки: ");
        scanf("%f",&spis[l].p);
        printf("Жиры: ");
        scanf("%f",&spis[l].f);
        printf("Углеводы: ");
        scanf("%f",&spis[l].ch);
    }
    write.open("diet.txt");
    for(l=0 ; l<ln ; l++)
    {
        write<<"Название: "<<spis[l].n<<"; ";
        write<<"Вес стакана: "<<spis[l].w<<"; ";
        write<<"Калорийность: "<<spis[l].c<<"; ";
        write<<"Белки: "<<spis[l].p<<"; ";
        write<<"Жиры: "<<spis[l].f<<"; ";
        write<<"Углеводы: "<<spis[l].ch<<endl;
    }
    write.close();
    delete [] spis;
    B=new char*[ln];
    C=new char*[ln];
    printf("\nЗадайте пороговое содержание жиров. Оно должно быть\nбольше хотя бы одного из описанных: ");
    scanf("%s",fats);
    cout<<endl;
    for(ffat=0 , j=0 , m=strlen(fats)-1 ; j!=strlen(fats) && m>=0 ; j++ , m--)
    {
        d=(float)fats[j]*pow(10,m);
        ffat+=d;
    }
    read.open("diet.txt");
    for(l=0 ; l<ln ; l++)
    {
        B[l]=new char[100];
        C[l]=new char[100];
        read.getline(B[l] , 100);
        strcpy(C[l] , B[l]);
        p=strtok(B[l] , "; ");
        k=0;
        while(p!=NULL)
        {
            k++;
            p=strtok(NULL , "; ");
            com=0;
            if(k==10)
            {
                for(d=0 , j=0 , m=strlen(p)-1 ; j!=strlen(p) && m>=0 ; j++ , m--)
                {
                    d=(float)p[j]*pow(10,m);
                    com+=d;
                }
                if(com<ffat)
                {
                    cout<<C[l]<<endl;
                }
            }
        }
    }
    read.close();
    printf("\nНажмите ENTER для выхода.");
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.06.2014, 17:35
Помогаю со студенческими работами здесь

Segmentation fault
Почему при таком варианте происходит Segmentation fault? vec3f trace(const Scene&amp; scene, const Ray&amp; ray) { const RenderObject*...

Segmentation fault
Доброго времени суток. Есть 2 класса. object class object{ void (*f)(object*); public: void setFunc(void...

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

Segmentation fault
не могу скинуть код по личным причинам. я использую строковые операторы strcmp, strcpy. выводит ошибку segmetation fault core dump....

Segmentation Fault
void Coder::set(const char * buf, size_t size) { if ((buf == nullptr)) { throw std::logic_error(&quot;buf == nullptr&quot;); } if...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
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 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru