Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Kaster
0 / 0 / 0
Регистрация: 02.06.2014
Сообщений: 9
#1

Segmentation fault - C++

02.06.2014, 08:13. Просмотров 585. Ответов 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)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.06.2014, 08:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Segmentation fault (C++):

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

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

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

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

Segmentation fault - C++
Пытаюсь реализовать генетический алгоритм на с++. Всего существует два класса: GeneticEngine, FitnessFunction. Класс FitnessFunction...

Segmentation fault - C++
Здравствуйте. Нужно динамически получить такое: char * a = {&quot;abc&quot;, NULL}; Пробую: char ** a; a = new char*; a = new char; ......

5
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.06.2014, 11:50 #2
Здесь что делается?
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
dzrkot
zzzZZZ...
519 / 349 / 53
Регистрация: 11.09.2013
Сообщений: 2,004
02.06.2014, 11:59 #3
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
зачем вы пользуетесь Си-шными вещами? используйте объекты ifstream/ofstream/fstream , методы read и write,, записали всё в файл сначала, потом считываете по структуре и проверяете удовлетворяет ли она условиям, там проще и нагляднее, чем куча fseek() итп итд , да и запись read/write((char *)&struct, sizeof(size_struct)); выглядит посимпотичнее
1
Kaster
0 / 0 / 0
Регистрация: 02.06.2014
Сообщений: 9
02.06.2014, 17:03  [ТС] #4
Цитата Сообщение от alsav22 Посмотреть сообщение
Здесь что делается?
Это запись полей массива структуры в файл.
0
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.06.2014, 17:10 #5
fscanf() - это чтение из файла.
1
Kaster
0 / 0 / 0
Регистрация: 02.06.2014
Сообщений: 9
15.06.2014, 17:35  [ТС] #6
Цитата Сообщение от 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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.06.2014, 17:35
Привет! Вот еще темы с ответами:

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

Segmentation fault :( - C++
#include&lt;iostream&gt; #include&lt;fstream&gt; using namespace std; struct test{ int id; char name; }; struct first{

Segmentation fault (iterator) - C++
И снова здравствуйте! Кратко: функция некоторым образом парсит строку (не в этом проблема) и удаляет из нее НЕ алфавитно-цифровые...

string segmentation fault - C++
Доброго времени суток! Подскажите в чем может быть проблема? string str; int main(int argc, char const *argv) { ...


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

Или воспользуйтесь поиском по форуму:
6
Yandex
Объявления
15.06.2014, 17:35
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru