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

C++

Войти
Регистрация
Восстановить пароль
 
OVERPOWER8
19 / 19 / 1
Регистрация: 29.11.2009
Сообщений: 224
#1

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

24.01.2010, 22:10. Просмотров 564. Ответов 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.01.2010, 22:10     Программа в порядке, однако segmentation fault.
Посмотрите здесь:

C++ Segmentation fault :(
Программа выводит segmentation fault! C++
C++ Segmentation fault
C++ Linux Segmentation fault
C++ Linux segmentation fault(
C++ Linux Printhepl ключом -h выдает что делает программа, но в конце пишет segmentation fault(core damped)
Segmentation fault C++
Segmentation fault C++
C++ Segmentation fault
C++ Segmentation fault
Segmentation fault. Программа для сложения многочленов C++
C++ Segmentation fault

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zim22
depict1
276 / 141 / 2
Регистрация: 11.07.2009
Сообщений: 606
24.01.2010, 22:13     Программа в порядке, однако segmentation fault. #2
отладчик - классная штука. открой его для себя.

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

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

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

А есть какой-то консольный дебаггер, без IDE? для G++
zim22
depict1
276 / 141 / 2
Регистрация: 11.07.2009
Сообщений: 606
24.01.2010, 23:03     Программа в порядке, однако segmentation fault. #5
Цитата Сообщение от OVERPOWER8 Посмотреть сообщение
А есть какой-то консольный дебаггер, без IDE? для G++
gdb
Yandex
Объявления
24.01.2010, 23:03     Программа в порядке, однако segmentation fault.
Ответ Создать тему
Опции темы

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