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

C++

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

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

29.12.2009, 22:27. Просмотров 558. Ответов 3
Метки нет (Все метки)

Пытаюсь написать программу, которая может хранить массив из произвольного числа объектов класса.
Но при попытке записать данные в класс, программа вылетает. Как же быть?

Оператор 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++
Всем привет! При выполнении кода вылетает ошибка: &quot;Ваша программа вызвала нарушение доступа(ошибку сегментации)&quot;. Как это...

ошибка сегментации - C++
Всем привет! Я никогда не программировал, а тут решил склепать небольшую программку. Да вот только не могу понять почему выскакивает...

Ошибка сегментации - C++
Здравствуйте. Скажите, почему так делать нельзя? class A { public: A* array; //массив A() { //Ошибка...

ошибка сегментации - C++
где может быть ошибка?

Ошибка сегментации - C++
Здравствуйте, написал программу, запускаю- Windows пишет: &quot;обнаружена ошибка. Приложение будет закрыто&quot;. Ошибка в функции: bool...

Ошибка сегментации - C++
int main() { int mas; } Объясните, почему такой код привод к ошибке? (компилятор VS 2012)

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,363
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
19 / 19 / 1
Регистрация: 29.11.2009
Сообщений: 224
30.12.2009, 01:20  [ТС]     Ошибка сегментации... #3
Цитата Сообщение от CheshireCat Посмотреть сообщение
Совершенно непонятно: если ты пишешь class, стало быть, это C++; какого же черта здесь realloc ???
А что такого? На С++, по крайней мере, с числовыми массивами, realloc работает как надо.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.12.2009, 10:36     Ошибка сегментации...
Еще ссылки по теме:

Ошибка сегментации. - C++
Здравствуйте, дорогие форумчане! Тут такое дело, есть программа, код приведен ниже, там есть некоторый массив D. После компиляции...

Ошибка сегментации - C++
Зарание благодарен за помощ собственно вот мой код . он должен считывать информацию о процессе с фалйа ,а принимать на вход пид процесса ...

Ошибка сегментации - C++ Linux
Здравствуйте! Есть несколько программ. #1 вытаскивает 2 числа из очереди сообщений, перемножает, помещает результат в очередь. #2...

Непонятная ошибка сегментации - C++
Задание 1: в таблице хранятся данные о баллах учеников участвовавших в олимпиаде. Распечатать фамилии тех, кто набрал больше 30 баллов. ...


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

Или воспользуйтесь поиском по форуму:
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,363
30.12.2009, 10:36     Ошибка сегментации... #4
Это верно. Однако, стандартный (подчеркиваю это: требуемый Стандартом языка!) класс вектор умеет и это и еще к тому же вагон и маааленькую такую тележку всяких вкусностей, которые тебе уже не надо будет реализовывать руками. Разве это не удобно?
Просто совет: приучайся сразу мыслить в стиле языка C++, а не "C с классами".
Yandex
Объявления
30.12.2009, 10:36     Ошибка сегментации...
Ответ Создать тему
Опции темы

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