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

C++

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

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

29.12.2009, 22:27. Просмотров 575. Ответов 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);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.12.2009, 22:27
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка сегментации... (C++):

Ошибка сегментации при освобождении памяти - C++
Вот в упор не понимаю, почему программа вылетает уже на завершающем этапе. Пожалуйста, посмотрите, что не так // для тестирования ...

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

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

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

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

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

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

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

Ошибка сегментации - C (СИ)
всем здраствуйте. double power(double n, int p) //определение функции 22 { 23 if (n ==0 &amp;&amp; p == 0) 24 { 25 ...

Ошибка сегментации - C (СИ)
собственно прикрепляю проект (code::blocks). при запуске вылетает ошибка. почему - хз.

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


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

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

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