С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/120: Рейтинг темы: голосов - 120, средняя оценка - 4.86
10 / 10 / 1
Регистрация: 16.12.2012
Сообщений: 141
1

Segmentation fault (core dumped)

15.03.2013, 14:03. Показов 22453. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток. Задача примерно такая. Сделать структуру с данными, класс List для управления в динамике этой структурой и класс с методами для ввода вывода данных в структуре. А проблема вот в чем, запускаю программу с помощью GNU c++ compiler и он начинает ругаться на первом введенном значении, а именно:
Segmentation fault (core dumped)
------------------
(program exited with code: 139)
Press return to continue
Как я понимаю, это указывает на то, что я пытаюсь обратиться к не выделенной области памяти. Но память вроде выделяется...в общем я запутался, помогите пожалуйста исправить программу и укажите на ошибку.
Спасибо.
Вот исходный код.
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
#include <stdio.h>
#include <iostream>
 
using namespace std;
 
struct Data {
  unsigned int day;
  unsigned int month;
  unsigned int year;
};
 
class List{
  public:
    Data *data;
    List *next;
};
 
List *begin;
List *current;
 
class inout{
  public:
    int ch;
    inout();
    void input();
    void output();
    ~inout();
};
 
 
inout::inout() {
begin=NULL;
ch=0;
while(ch!=1) input();
output();
};
 
void inout::input() {
  cout<<"enter data"<<endl;
  current=new List;
  if(begin==NULL) current=new List;
    else {current->next=new List; current=current->next;}
  current->next=NULL;
  cin>>current->data->day;
  cin>>current->data->month;
  cin>>current->data->year;
  if(begin==NULL) begin=current;
  cout<<"To finish entering data, press 1";
  cin>>ch;
 
};
 
void inout::output() {
  current=begin;
  do {
    cout<<current->data->day<<".";
    cout<<current->data->month<<".";
    cout<<current->data->year;
    cout<<endl;
    current=current->next;
  } while (current!=NULL);
};
 
inout::~inout(){
  while(begin){
    current=begin;
    begin=current->next;
    delete current;
  }
  delete begin;
};
 
int main () {
  inout obj;
  return 0;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.03.2013, 14:03
Ответы с готовыми решениями:

Segmentation fault (core dumped)
Добрый вечер. При вводе любых чисел, кроме 0 - й, выводит ошибку. #include &lt;iostream&gt; void...

Segmentation fault(core dumped)
#include &lt;iostream&gt; int replace1(char *ptr, char c, char m); int main() { char *ptr =...

Segmentation fault (core dumped)
Добрый день. Подскажите, при перемножении матриц более чем 600х600, появляется ошибка Segmentation...

Объединение двух деревьев бинарного поиска ( Segmentation fault (core dumped) )
Блин, народ, сломал голову. Вроде алгоритм простенький, но не работает. Нужно объединить два...

8
4264 / 3323 / 925
Регистрация: 25.03.2012
Сообщений: 12,520
Записей в блоге: 1
15.03.2013, 14:10 2
под указатели next память, смотрю, во всю выделяется и даже удаляется когда надо.
Цитата Сообщение от art3330 Посмотреть сообщение
C++
1
2
3
4
5
class List{
  public:
   Data *data;
   List *next;
};
под next память, смотрю, во всю выделяется и даже удаляется когда надо.
А где хоть одна строчка data=new Data???
0
10 / 10 / 1
Регистрация: 16.12.2012
Сообщений: 141
17.03.2013, 02:53  [ТС] 3
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
под указатели next память, смотрю, во всю выделяется и даже удаляется когда надо.
под next память, смотрю, во всю выделяется и даже удаляется когда надо.
А где хоть одна строчка data=new Data???
Ага. А в какой части кода мы должны выделить память? Просто если выделять, там же где выделяется и для next, до выдает ошибку, что нет декларации «data» в этой области видимости.

Добавлено через 20 часов 16 минут
Так все-таки. Где надо выделить память под Data? Я уже где только не пытался это сделать.

Добавлено через 29 минут
Мы должны память под Data в конструкторе List выделять, так? Нету под рукой пк, чтобы проверить, но я вроде понял.

Добавлено через 8 часов 58 минут
Ну так все таки. Как делать?

Добавлено через 5 часов 9 минут
Пробовал запихнуть выделение памяти в конструктор List, все равно не то. Подскажите, пожалуйста, как сделать.

Добавлено через 1 час 43 минуты
Где я только не пробовал выделять память под дата, либо пишет:
lab1.cpp:45:3: ошибка: нет декларации «data» в этой области видимости
либо
lab1.cpp:45:9: предупреждение: неиспользуемая переменная «data» [-Wunused-variable]
Укажите как сделать правильно.
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
17.03.2013, 03:33 4
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
104
105
106
107
108
109
110
111
#include <iostream>
 
using namespace std;
 
 
struct Date
{
  unsigned int day;
  unsigned int month;
  unsigned int year;
 
  Date()
      : day(0), month(0), year(0)
  {
  }
 
  Date(int d, int m, int y)
      : day(d), month(m), year(y)
  {
  }
};
 
ostream& operator << (ostream& out, const Date& date)
{
    out << date.day << '.' << date.month << '.' << date.year;
    return out;
}
 
 
struct Node
{
    Date  date;
    Node* next;
 
    Node()
        : next(0)
    {
    }
 
    Node(const Date& aDate)
        : date(aDate), next(0)
    {
    }
};
 
 
class List
{
    Node* m_head;
    Node* m_tail;
 
public:
    List()
        : m_head(0)
        , m_tail(0)
    {
    }
 
    ~List()
    {
        Node* node = m_head;
        while (node != 0)
        {
            Node* tmp = node->next;
            delete node;
            node = tmp;
        }
    }
 
    void add(const Date& date)
    {
        if (m_tail == 0)
        {
            m_head = new Node(date);
            m_tail = m_head;
        }
        else
        {
            m_tail->next = new Node(date);
            m_tail = m_tail->next;
        }
    }
 
    void print(ostream& out) const
    {
        Node* node = m_head;
        while (node != 0)
        {
            out << node->date << endl;
            node = node->next;
        }
    }
 
private:
    List(const List&);
    List& operator = (const List&);
};
 
int main ()
{
 
    List lst;
    lst.add(Date(1, 1, 2013));
    lst.add(Date(2, 1, 2013));
    lst.add(Date(3, 1, 2013));
    lst.add(Date(4, 2, 2013));
 
    lst.print(cout);
 
    return 0;
}
1
10 / 10 / 1
Регистрация: 16.12.2012
Сообщений: 141
17.03.2013, 20:54  [ТС] 5
Как-то очень запутанно. И вроде не очень соответствует заданию. Можно как-нибудь модифицировать мою программу? Но все равно спасибо большое за помощь =)
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
17.03.2013, 20:59 6
несоответсвие только в том, что вместо ввода дат с клавиатуры они явно втыкаются в список. в остальном - простейшая реализация односвязного списка. Где вы там умудрились запутаться я не знаю.
1
10 / 10 / 1
Регистрация: 16.12.2012
Сообщений: 141
17.03.2013, 21:14  [ТС] 7
Цитата Сообщение от DU Посмотреть сообщение
несоответствие только в том, что вместо ввода дат с клавиатуры они явно втыкаются в список. в остальном - простейшая реализация односвязного списка. Где вы там умудрились запутаться я не знаю.
Просто немного не ясна вот эта часть
C++
1
2
3
4
5
ostream& operator << (ostream& out, const Date& date)
{
    out << date.day << '.' << date.month << '.' << date.year;
    return out;
}

Потом про структуру Node

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
struct Node
{
    Date  date;
    Node* next;
 
    Node()
        : next(0)
    {
    }
 
    Node(const Date& aDate)
        : date(aDate), next(0)
    {
    }
};
Также что мы храним в private класса list и для чего нужны эти поля.

C++
1
2
3
4
private:
    List(const List&);
    List& operator = (const List&);
};
Если бы Вы смогли мне помочь я был бы очень Вам благодарен.
Заранее говорю спасибо. =)
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
17.03.2013, 21:21 8
C++
1
2
3
4
5
6
7
8
9
10
11
ostream& operator << (ostream& out, const Date& date)
//это перегрузка оператора <<
//за счет этой перегрузки можно писать так:
Date date;
std::cout << date << std::endl;
// используется в строчке 90 исходного примера.
//у вас же явно все поля на вывод уходят, что несколько многословнее:
 cout<<date->day<<".";
 cout<<date->month<<".";
 cout<<date->year;
 cout<<endl;
struct Node - ну это узел списка. содержит поле с данными и указатель на следующий узел. список ведь из узлов состоит.



C++
1
2
3
private:
    List(const List&);
    List& operator = (const List&);
это не реализованные конструктор копирования и оператор присваивания. их или нужно вот так запрещать,
или реализовывать по нормальному. если так не сделать, то компилятор сгенерит дефолтные, а они неверные.
следующий код скомпилится, но будет приводить к крашам:
C++
1
2
3
4
5
List lst1;
lst1.add(Date(1, 2, 3));
List lst2 = list1; // отсюда начнутся проблемы
List lst3;
lst3 = lst2; // этот код тоже приведет к проблемам.
1
10 / 10 / 1
Регистрация: 16.12.2012
Сообщений: 141
17.03.2013, 21:28  [ТС] 9
DU, большое спасибо =) Все понятно =)
0
17.03.2013, 21:28
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.03.2013, 21:28
Помогаю со студенческими работами здесь

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

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

Segmentation fault
При выводе второго объекта на экран объекте, вылетает с ошибкой. segmentation fault(core dumped). ...

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


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Это работает. Скорость асинхронной логики велика. Вопрос видимо останется в стабильности. Плата - огонь!
Hrethgir 13.01.2025
По прошлому проекту в Logisim Evolution https:/ / www. cyberforum. ru/ blogs/ 223907/ blog8781. html прилагаю файл архива проекта Gowin Eda и снимок. Восьмибитный счётчик из сумматора+ генератор сигнала. . .
UserScript для подсветки кнопок языков программировани­­­­я в зависимости от текущего раздела
volvo 13.01.2025
В результате работы этого скрипта подсвечиваются нужные кнопки не только в форме быстрого ответа, но и при редактировании сообщения: / / ==UserScript== / / @name CF_DefaultLangSelect / / . . .
Введение в модели и алгоритмы машинного обучения
InfoMaster 12.01.2025
Машинное обучение представляет собой одну из наиболее динамично развивающихся областей искусственного интеллекта, которая фокусируется на разработке алгоритмов и методов, позволяющих компьютерам. . .
Как на Python создать нейросеть для решения задач
InfoMaster 12.01.2025
В контексте стремительного развития современных технологий особое внимание уделяется таким инструментам, как нейросети. Эти структуры, вдохновленные биологическими нейронными сетями, используются для. . .
Как создать нейросеть для генерации картинок на Python
InfoMaster 12.01.2025
Генерация изображений с помощью искусственных нейронных сетей стала одним из наиболее захватывающих направлений в области компьютерного зрения и машинного обучения. В этой статье мы рассмотрим. . .
Создание нейросети для генерации текста на Python
InfoMaster 12.01.2025
Нейросети, или искусственные нейронные сети, представляют собой модели машинного обучения, вдохновленные работой человеческого мозга. Они состоят из множества взаимосвязанных узлов, или "нейронов",. . .
Как создать нейросеть распознавания изображений на Python
InfoMaster 12.01.2025
Введение в распознавание изображений с помощью нейросетей Распознавание изображений с помощью нейронных сетей стало одним из самых впечатляющих достижений в области искусственного интеллекта. Эта. . .
Основы искуственного интеллекта
InfoMaster 12.01.2025
Искусственный интеллект (ИИ) представляет собой одну из наиболее динамично развивающихся областей современной науки и технологий. В широком смысле под искусственным интеллектом понимается способность. . .
Python и нейросети
InfoMaster 12.01.2025
Искусственные нейронные сети стали неотъемлемой частью современных технологий, революционизировав множество областей - от медицинской диагностики до автономных транспортных средств. Python, благодаря. . .
Python в машинном обучении
InfoMaster 12.01.2025
Python стал неотъемлемой частью современного машинного обучения, завоевав позицию ведущего языка программирования в этой области. Его популярность обусловлена несколькими ключевыми факторами, которые. . .
Создание UI на Python с TKinter
InfoMaster 12.01.2025
TKinter — это одна из наиболее популярных библиотек для создания графических интерфейсов пользователей (GUI) в языке программирования Python. TKinter входит в стандартную библиотеку Python, что. . .
HTML5 в разработке мобильных приложений
InfoMaster 12.01.2025
Введение: Обзор роли HTML5 в мобильной разработке В современном мире мобильных технологий HTML5 стал ключевым инструментом для разработки кроссплатформенных приложений. Эта технология произвела. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru