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

Ошибка сегментации... - C++

Войти
Регистрация
Восстановить пароль
 
OVERPOWER8
 Аватар для OVERPOWER8
19 / 19 / 1
Регистрация: 29.11.2009
Сообщений: 224
29.12.2009, 22:27     Ошибка сегментации... #1
Пытаюсь написать программу, которая может хранить массив из произвольного числа объектов класса.
Но при попытке записать данные в класс, программа вылетает. Как же быть?

Оператор new - НЕ подходит, т. к. количество объектов массива может быть изменено в любой момент, и следовательно, память будет постоянно "перевысвобождаться".

Вот эксиз класса:

C++
1
2
3
4
5
6
7
8
9
10
class person
{
    public:
        
        void SetName(string name) { _name=name;}
        void SetAge(int age)    { _age =age; }
    private:
        string _name;
        int _age;
};
И вот функция:

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
...
string name;
int age;
int count=0;
 
person* users=NULL;
for(;;)
{
    cout << "Person " << count+1 << ": ";
    cout << endl << "Age (0 to exit): ";
    cin >> age;
    if(age==0)  break;
    cout << "Name: ";   cin >> name;
    count++;
    users=(person*)realloc(users, count*sizeof(person));
        
    if(users==NULL)
    {
        cout << "Error allocating memory!" << endl;
        exit(1);
    }
 
            // ЗДЕСЬ ВЫЛЕТАЕТ
 
    users[count-1].SetName(name);
    users[count-1].SetAge(age);
}
...
free(users);
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.12.2009, 22:27     Ошибка сегментации...
Посмотрите здесь:

Ошибка сегментации C++
Непонятная ошибка сегментации C++
C++ ошибка сегментации
Ошибка Сегментации C++
C++ Ошибка сегментации из ниоткуда
C++ Ошибка сегментации.
Ошибка сегментации C++
Ошибка сегментации C++ Linux
C++ ошибка сегментации
C++ Ошибка сегментации
Непонятная ошибка сегментации C++
Ошибка сегментации C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,315
29.12.2009, 23:33     Ошибка сегментации... #2
Совершенно непонятно: если ты пишешь class, стало быть, это C++; какого же черта здесь realloc ???
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
class person
{ 
        public:                 
    person(string name, int age): _name(name), _age(age) {};                 
    void SetName(string name) { _name=name;}                 
    void SetAge(int age)    { _age =age; }         
 
private: 
    string _name;                 
    int _age; 
};   
 
string name; 
int age;   
 
vector<person> users;   
 
for(;;) 
{         
    cout << "Person " << users.size()+1 << ": ";         
    cout << endl << "Age (0 to exit): ";         
    cin >> age;         
    if(age==0)             
        break;         
    cout << "Name: ";         
    cin >> name;           
 
    users.push_back(person(name, age)); 
}
OVERPOWER8
 Аватар для OVERPOWER8
19 / 19 / 1
Регистрация: 29.11.2009
Сообщений: 224
30.12.2009, 01:20  [ТС]     Ошибка сегментации... #3
Цитата Сообщение от CheshireCat Посмотреть сообщение
Совершенно непонятно: если ты пишешь class, стало быть, это C++; какого же черта здесь realloc ???
А что такого? На С++, по крайней мере, с числовыми массивами, realloc работает как надо.
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,315
30.12.2009, 10:36     Ошибка сегментации... #4
Это верно. Однако, стандартный (подчеркиваю это: требуемый Стандартом языка!) класс вектор умеет и это и еще к тому же вагон и маааленькую такую тележку всяких вкусностей, которые тебе уже не надо будет реализовывать руками. Разве это не удобно?
Просто совет: приучайся сразу мыслить в стиле языка C++, а не "C с классами".
Yandex
Объявления
30.12.2009, 10:36     Ошибка сегментации...
Ответ Создать тему
Опции темы

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