Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
6 / 6 / 1
Регистрация: 20.12.2010
Сообщений: 392
1

Освободить память и записать по новой

25.11.2013, 23:04. Просмотров 398. Ответов 6
Метки нет (Все метки)

Есть массив:
C++
1
char Name[25];
нужно выполнить проверку ввода данных и при надобности освободить память и записать в массив новое значение
C++
1
2
3
4
5
6
7
8
9
10
11
12
void Country::setName(void){
    if(Name!=NULL){
        char *Name = new char[];
        delete[] Name;
    }
    else{
        Name[25] = *new char[strlen(Name)+1];
        strcpy_s(Name, Name);
    }
    cout<<"Введите новое название страны: ";
    cin>>Name;
}
скажите, я правильно делаю?

Добавлено через 6 часов 3 минуты
может хоть кто то сказать? просто "да" или "нет"?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.11.2013, 23:04
Ответы с готовыми решениями:

Как освободить старые ImageVew чтобы освободить память
Привет всем Я новичок поэтому прошу сильно не пинать. В общем мое первое приложение типа интернет...

Освободить память
Вот к примеру, прога обрабатывает строки в txt. Как сделать чтобы те txt которые она уже...

Освободить память C++
Доброго времени суток, помогите пожалуйста. Вопрос вот в чем, если у меня функция в которой Vector...

Освободить память от потока
WaveStream ws = new Mp3FileReader(path); WaveOut wo = new WaveOut(); ...

6
136 / 128 / 59
Регистрация: 13.12.2012
Сообщений: 293
25.11.2013, 23:18 2
Кривовато у вас как-то все..
C++
1
2
3
4
if(Name!=NULL){
        char *Name = new char[];
        delete[] Name;
    }
Здесь, если Name указывает на строку, вы сразу выделяете память под новую строку и тут же ее удаляете. Нелогично как-то. Это во первых. Далее, указатель на старую строку при этом теряется, так как затирается указателем на новую строку, и освободить память вы при этом уже никак не сможете. В третьих,
C++
1
new char[];
так писать нельзя, да и компилятор это запретит, так как он должен знать, под какого размера массив выделять память. В четвертых, непонятно назначение этой строки
C++
1
Name[25] = *new char[strlen(Name)+1];
которая выполняется при условии, что указатель на строку пустой, т.е. равен NULL. А вы еще пытаетесь вычислить длину строки, на которую указывает этот указатель, а при этом указатель в принципе никуда не указывает.
И последнее,
C++
1
strcpy_s(Name, Name);
копирование строки в саму себя. Идея, в принципе, интересная, но смысловой нагрузки опять же никакой не несет
1
6 / 6 / 1
Регистрация: 20.12.2010
Сообщений: 392
25.11.2013, 23:44  [ТС] 3
ViktorKozlov, скажите пожалуйста, как я должен освободить память при неправильном вводе данных чтобы заполнить массив новым значением?
0
5469 / 4864 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
26.11.2013, 07:12 4
Цитата Сообщение от Кротяка Посмотреть сообщение
Есть массив: Код C++1
char Name[25];
Если массив такой (не динамически созданный), то специально освобождать ничего не нужно. При чтении новой строки в массив, старое содержимое удалится.
0
6 / 6 / 1
Регистрация: 20.12.2010
Сообщений: 392
27.11.2013, 05:09  [ТС] 5
alsav22, препод требует, ничего не поделаешь

Добавлено через 5 часов 21 минуту
немножко переделал
C++
1
2
3
4
5
6
7
8
    char *Nazvanie = new char[*Name];
    Name[25] = *new char[strlen(Nazvanie)+1];
    if(Name!=NULL){
        cout<<"Введите новое название страны: ";
        cin>>Nazvanie;
        strcpy_s(this->Name, Nazvanie);
        delete[] Nazvanie;
    }
так правильно, скажите?
0
866 / 764 / 174
Регистрация: 11.01.2012
Сообщений: 1,942
27.11.2013, 05:27 6
Цитата Сообщение от Кротяка Посмотреть сообщение
нужно выполнить проверку ввода данных и при надобности
Хоть напишите что такое выполнить проверку ввода данных
Угадал-неугадал что-ли ?
0
5469 / 4864 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
27.11.2013, 09:26 7
Цитата Сообщение от Кротяка Посмотреть сообщение
alsav22, препод требует, ничего не поделаешь
Что требует? Освобождать память под статически созданным массивом?

Добавлено через 2 минуты
Цитата Сообщение от Кротяка Посмотреть сообщение
так правильно, скажите?
Компилятор не спрашивали?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.11.2013, 09:26

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Как освободить память?
подскажите как правильно освободить память,спасибо заранее))) #include &quot;stdafx.h&quot; #include...

Освободить память в стуктуре
Не могу четко освободить память. Где косяк и как ее правильно освободить? Сообщение Valgrind ...

Освободить незадействованную память
у меня создается список под каждый элемент выделяю память,потом с этим списком происходят операции...

Не получается освободить память
Здравствуйте, такая загвоздка, начал изучать указатели и создание динамических массивов, проблема в...


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

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

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