Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
19 / 19 / 2
Регистрация: 29.11.2009
Сообщений: 224
1

Программа в порядке, однако segmentation fault.

24.01.2010, 22:10. Показов 1013. Ответов 4
Метки нет (Все метки)

Код правильный, программа компилируется, работает как надо, однако при выходе получаю Segmentation fault.

Так в чем же ошибка?

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
112
113
114
115
// ADT-класс
#include <iostream>
using namespace std;
 
 
class Shape
{
    public:
        Shape() { }
        virtual ~Shape() { }
        virtual long GetArea() = 0;
        virtual long GetPerim() = 0;
        virtual void Draw() = 0;
    private:
};
 
class Circle: public Shape
{
    public:
        Circle(int radius) : itsRadius(radius) { }
        ~Circle() { }
        long GetArea() { return 3*itsRadius*itsRadius; }
        long GetPerim() { return 3*itsRadius; }
        void Draw();
    private:
        int itsRadius;
        int itsCircumference;
};
 
void Circle::Draw()
{
    cout << "Circle drawing routine here!\n";
}
 
 
class Rectangle: public Shape
{
    public:
        Rectangle(int len, int width):
            itsLength(len), itsWidth(width) {}
        virtual ~Rectangle() {}
        virtual long GetArea() { return itsLength * itsWidth; }
        virtual long GetPerim() { return 2*(itsLength + itsWidth); }
        virtual int GetLength() { return itsLength; }
        virtual int GetWidth() { return itsWidth; }
        virtual void Draw();
    private:
        int itsWidth;
        int itsLength;
};
 
void Rectangle::Draw()
{
    for(int i=0; i<itsLength; i++)
    {
        for(int j=0; j<itsWidth; j++)
            cout << "x ";
        
        cout << endl;
    }
}
 
class Square: public Rectangle
{
    public:
        Square(int len);
        Square(int len, int width);
        ~Square() { }
        long GetPerim() { return 4*GetLength(); }
};
 
Square::Square(int len):
    Rectangle(len, len)
{}
 
Square::Square(int len, int width):
    Rectangle(len, width)
    
{
    if(GetLength() != GetWidth())
        cout << "Error, not a square... a Rectangle??\n";
}
 
int main()
{
    int choice;
    bool fQuit = false;
    Shape* sp;
    
    while(!fQuit)
    {
        cout << "(1)Circle (2)Rectangle (3)Square (0)Quit: ";
        cin >> choice;
        
        switch(choice)
        {
            case 0: fQuit = true;
                break;
            case 1: sp = new Circle(5);
                break;
            case 2: sp = new Rectangle(4, 6);
                break;
            case 3: sp = new Square(5);
                break;
            default: cout << "Please enter a number between 0 and 3: ";
                continue;
                    break;
        }
        if(!fQuit)
            sp -> Draw();
                delete sp;
            cout << endl;
    }
    return 0;
}
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.01.2010, 22:10
Ответы с готовыми решениями:

Программа выводит segmentation fault!
Текст задачи: Структура «Спортивная команда»: - название; - из какого города; - сколько игр...

Segmentation fault. Программа для сложения многочленов
Доброго времени суток всем. Мне задали сделать программу по сложению и перемножению многочленов....

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

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

4
depict1
281 / 146 / 4
Регистрация: 11.07.2009
Сообщений: 606
24.01.2010, 22:13 2
отладчик - классная штука. открой его для себя.

Добавлено через 48 секунд
ошибка возникает из-за этого:
Цитата Сообщение от OVERPOWER8 Посмотреть сообщение
Shape* sp;
1
576 / 570 / 65
Регистрация: 29.01.2009
Сообщений: 1,274
24.01.2010, 22:19 3
Цитата Сообщение от OVERPOWER8 Посмотреть сообщение
delete sp;
Если выбрать 0, то память под sp не выделится, а delete все равно сработает, отсюда и ошибки с сегментацией.
1
19 / 19 / 2
Регистрация: 29.11.2009
Сообщений: 224
24.01.2010, 22:27  [ТС] 4
>> zim22 >> Gravity

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

Добавлено через 59 секунд
>> zim22

А есть какой-то консольный дебаггер, без IDE? для G++
0
depict1
281 / 146 / 4
Регистрация: 11.07.2009
Сообщений: 606
24.01.2010, 23:03 5
Цитата Сообщение от OVERPOWER8 Посмотреть сообщение
А есть какой-то консольный дебаггер, без IDE? для G++
gdb
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.01.2010, 23:03

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Segmentation Fault
void Coder::set(const char * buf, size_t size) { if ((buf == nullptr)) { throw...

Segmentation fault :(
#include&lt;iostream&gt; #include&lt;fstream&gt; using namespace std; struct test{ int id; char name;...

segmentation fault
При компиляции выдает segmentation fault, подскажите, как исправить. #include &lt;iostream&gt;...

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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