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

Найти ошибку в приведенном коде - C++

Восстановить пароль Регистрация
 
Faoxis
6 / 6 / 0
Регистрация: 11.04.2012
Сообщений: 114
13.03.2014, 17:05     Найти ошибку в приведенном коде #1
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
#include <iostream>
 
using namespace std;
 
 
///////////////////////////////////////////////////////////////////////////////////
 
class abon
{
public:
        char *adress;
    char *SecName;
 
};
 
//----------------------------------------------------------------------------------------
int main()
{
    abon Petr;
 
    cin >> Petr.adress;
    cout << Petr.adress << endl;
 
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
jurok_85
226 / 209 / 70
Регистрация: 21.02.2013
Сообщений: 494
13.03.2014, 17:20     Найти ошибку в приведенном коде #2
вы в классе создаете указатель без выделения памяти
C++
1
2
3
4
5
6
7
class abon
{
public:
        char adress[80];
    char SecName[20];
 
};
так покатит
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.03.2014, 17:20     Найти ошибку в приведенном коде #3
Память под указатели нужно выделить.
C++
1
2
3
abon Petr;
Petr.adress = new char[50];
Petr.SecName = new char[50];
jurok_85
226 / 209 / 70
Регистрация: 21.02.2013
Сообщений: 494
13.03.2014, 17:28     Найти ошибку в приведенном коде #4
можно еще с конструктором сделать
C++
1
2
3
4
5
6
7
8
9
class abon
{
 
public:
        abon():adress(new char[80]),SecNamenew(new char[20]) {}
        char* adress;
    char* SecNamenew;
 
};
Faoxis
6 / 6 / 0
Регистрация: 11.04.2012
Сообщений: 114
13.03.2014, 17:34  [ТС]     Найти ошибку в приведенном коде #5
А если задействовать только 10 символов, а не 50 (в динамическом массиве), память потратится на все 50 или только как на 10 ?
jurok_85
226 / 209 / 70
Регистрация: 21.02.2013
Сообщений: 494
13.03.2014, 17:38     Найти ошибку в приведенном коде #6
как на 50
Faoxis
6 / 6 / 0
Регистрация: 11.04.2012
Сообщений: 114
13.03.2014, 17:42  [ТС]     Найти ошибку в приведенном коде #7
А мне надо, чтобы память выделялась прямо в процессе работы программы. Если ставлю пустые квадратные скобки, то выдает ошибку. Конечно, если поставить освобождение памяти функцией delete в деструктор, то память будет освобождаться после выхода из блока, но нет ли какого - нибудь легкого решения именно выделения памяти ?
jurok_85
226 / 209 / 70
Регистрация: 21.02.2013
Сообщений: 494
13.03.2014, 17:47     Найти ошибку в приведенном коде #8
тогда воспользуйся string
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <string>
 
using namespace std;
 
 
///////////////////////////////////////////////////////////////////////////////////
 
class abon
{
public:
       string adress;
     string SecName;
 
};
Faoxis
6 / 6 / 0
Регистрация: 11.04.2012
Сообщений: 114
13.03.2014, 17:56  [ТС]     Найти ошибку в приведенном коде #9
А есть ли что-нибудь для целочисленного массива, если я не знаю сколько места понадобиться в нем ? А лучше даже для массива классов.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.03.2014, 18:02     Найти ошибку в приведенном коде
Еще ссылки по теме:

C++ Найти и исправить ошибки в приведенном коде, C++
Найти и исправить ошибки в приведенном коде C++
Найти ошибку в приведенном коде C++

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.03.2014, 18:02     Найти ошибку в приведенном коде #10
Цитата Сообщение от Faoxis Посмотреть сообщение
А есть ли что-нибудь для целочисленного массива, если я не знаю сколько места понадобиться в нем ? А лучше даже для массива классов.
vector.
Yandex
Объявления
13.03.2014, 18:02     Найти ошибку в приведенном коде
Ответ Создать тему
Опции темы

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