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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.92
Alexpm
3 / 3 / 0
Регистрация: 06.09.2011
Сообщений: 47
#1

Динамический массив (классов) - C++

14.02.2012, 11:09. Просмотров 1528. Ответов 5
Метки нет (Все метки)

Вот такой вопрос, почему так?

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
#include <iostream>
#include <string>
using namespace std;
 
class primer
{
public:
    primer (int _number, char _s1[])
    {
        number=_number;
        strcpy(s1, _s1);
    }
    primer()
    {
    }
    primer input(int number)
    {
        char s1[10];
        cout<<"Пример:"<<" ";
        cin.sync();
        cin.getline(s1, sizeof(s1), '\n');
        cin.sync();
        primer tmp(number, s1);
        return tmp;
    }
    void output()
    {
        cout<<number<<" "<<s1<<endl;
    }
    private:
    int number;
    char s1[10];
};
 
int dobavl(primer *mass, int n)
{
    cout<<"Сколько?"<<" "; cin>>n;
    mass=(primer*) realloc (mass, (n*sizeof(primer)));  
    for (int i=0, number=1; i<n; i++, number++)
    {
        mass[i]=mass[i].input(number);
    }
        for (int i=0; i<n; i++)
    {
        mass[i].output();
    }
    return n;
};
 
void main()
{
    setlocale(LC_ALL,"Russian");
    primer *mass=(primer*) malloc(sizeof(primer));
    int n=0;
    n=dobavl(mass, n);
}
[IMG]http://s017.***********/i411/1202/ee/9772e65b3338t.jpg[/IMG]
==============================================================
А если вывод на экран делать из отдельной функции:
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
#include <iostream>
#include <string>
using namespace std;
 
class primer
{
public:
    primer (int _number, char _s1[])
    {
        number=_number;
        strcpy(s1, _s1);
    }
    primer()
    {
    }
    primer input(int number)
    {
        char s1[10];
        cout<<"Пример:"<<" ";
        cin.sync();
        cin.getline(s1, sizeof(s1), '\n');
        cin.sync();
        primer tmp(number, s1);
        return tmp;
    }
    void output()
    {
        cout<<number<<" "<<s1<<endl;
    }
    private:
    int number;
    char s1[10];
};
 
int dobavl(primer *mass, int n)
{
    cout<<"Сколько?"<<" "; cin>>n;
    mass=(primer*) realloc (mass, (n*sizeof(primer)));  
    for (int i=0, number=1; i<n; i++, number++)
    {
        mass[i]=mass[i].input(number);
    }
    return n;
};
 
void vivod(primer mass[], int n)
{   
    for (int i=0; i<n; i++)
    {
        mass[i].output();
    }
};
 
void main()
{
    setlocale(LC_ALL,"Russian");
    primer *mass=(primer*) malloc(sizeof(primer));
    int n=0;
    n=dobavl(mass, n);
    vivod(mass, n);
}
То так:
[IMG]http://s018.***********/i519/1202/bd/180d47cabe98t.jpg[/IMG]

Как сделать правильно, чтоб работало во втором случае?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.02.2012, 11:09     Динамический массив (классов)
Посмотрите здесь:

C++ Динамический массив
динамический массив C++
динамический массив в С++ C++
Динамический массив C++
C++ Динамический массив
C++ Динамический массив
динамический массив C++
Динамический массив C++
Динамический массив классов C++
динамический массив C++
Динамический массив C++
Динамический массив C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
rangerx
1931 / 1540 / 141
Регистрация: 31.05.2009
Сообщений: 2,905
14.02.2012, 11:40     Динамический массив (классов) #2
Нельзя применять функции языка С для работы с памятью к классам, используйте std::vector.

Добавлено через 6 минут
C++
1
int dobavl(primer *mass, int n)
здесь у вас в любом случае ошибка. Вы передаёте в функцию копию указателя, и в дальнейшем работаете именно с копией. которая никак не связана с переменной mass из функции main. Правильный вариант
C++
1
int dobavl(primer *&mass, int n)
либо
C++
1
int dobavl(primer **mass, int n)
Alexpm
3 / 3 / 0
Регистрация: 06.09.2011
Сообщений: 47
14.02.2012, 11:40  [ТС]     Динамический массив (классов) #3
Я не проходил еще векторы
Если нельзя, значит задача отпадает.
Спасибо.

C++
1
int dobavl(primer *&mass, int n)
мм, а вот так всё работает)) тогда так сделаю..
еще раз спасибо..
rangerx
1931 / 1540 / 141
Регистрация: 31.05.2009
Сообщений: 2,905
14.02.2012, 12:55     Динамический массив (классов) #4
Цитата Сообщение от Alexpm Посмотреть сообщение
Я не проходил еще векторы
std::vector это расширяемый динамический массив. Если вам необходимо работать с памятью в ручную, используйте операторы new и delete, вместо malloc и free(функцию перераcпределения памяти(realloc) придётся писать самостоятельно).
Alexpm
3 / 3 / 0
Регистрация: 06.09.2011
Сообщений: 47
14.02.2012, 13:12  [ТС]     Динамический массив (классов) #5
Цитата Сообщение от rangerx Посмотреть сообщение
std::vector это расширяемый динамический массив. Если вам необходимо работать с памятью в ручную, используйте операторы new и delete, вместо malloc и free(функцию перераcпределения памяти(realloc) придётся писать самостоятельно).
Дак ведь malloc и relloc работают, ошибка была при передачи массива в функцию. Я понимаю, что использование их не лучший вариант, но пока что знаний не особо хватает для использования чего то другого...

New и delete у меня тоже используется. Вот возник вопрос по ним, как использовать правильно delete? Точно также как и с массивом типа int к примеру delete[] mass?
rangerx
1931 / 1540 / 141
Регистрация: 31.05.2009
Сообщений: 2,905
14.02.2012, 13:37     Динамический массив (классов) #6
Цитата Сообщение от Alexpm Посмотреть сообщение
Дак ведь malloc и relloc работают, ошибка была при передачи массива в функцию. Я понимаю, что использование их не лучший вариант, но пока что знаний не особо хватает для использования чего то другого...
Только что ответил здесь(чтобы не повторяться)
Цитата Сообщение от Alexpm Посмотреть сообщение
Вот возник вопрос по ним, как использовать правильно delete? Точно также как и с массивом типа int к примеру delete[] mass?
Да.
Yandex
Объявления
14.02.2012, 13:37     Динамический массив (классов)
Ответ Создать тему
Опции темы

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