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

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

25.11.2013, 23:04. Просмотров 348. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.11.2013, 23:04
Ответы с готовыми решениями:

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

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

Как правильно освободить память
Написал вот такой костыль: wchar_t* getDate() { time_t seconds = time(NULL); tm timeinfo =...

Как правильно освободить память
Здрасте! (Тема: Шаблоны функций.) Не могу правильно написать метод для освобождения памяти. В...

Как правильно освободить память
Есть функция char* md5(const char*). Как освободить память выделенную ею? #include &lt;openssl\md5.h&gt;...

6
ViktorKozlov
134 / 126 / 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
alsav22
5453 / 4848 / 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
MrCold
863 / 761 / 174
Регистрация: 11.01.2012
Сообщений: 1,942
27.11.2013, 05:27 6
Цитата Сообщение от Кротяка Посмотреть сообщение
нужно выполнить проверку ввода данных и при надобности
Хоть напишите что такое выполнить проверку ввода данных
Угадал-неугадал что-ли ?
0
alsav22
5453 / 4848 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
27.11.2013, 09:26 7
Цитата Сообщение от Кротяка Посмотреть сообщение
alsav22, препод требует, ничего не поделаешь
Что требует? Освобождать память под статически созданным массивом?

Добавлено через 2 минуты
Цитата Сообщение от Кротяка Посмотреть сообщение
так правильно, скажите?
Компилятор не спрашивали?
0
27.11.2013, 09:26
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.11.2013, 09:26

Как правильно освободить память
Здравствуйте все! Подскажите, как правильно освобождать память, выделенную под массив оператором...

Как освободить память быстро?
Функция malloc неправильно работает...Заполняется память быстро,а очищается долго,с чем это...

Как освободить память занятую строкой?
// ConsoleApplication7.cpp: определяет точку входа для консольного приложения. // #include...


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

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

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