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

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

Войти
Регистрация
Восстановить пароль
 
Кротяка
5 / 5 / 0
Регистрация: 20.12.2010
Сообщений: 378
#1

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

25.11.2013, 23:04. Просмотров 311. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Освободить память и записать по новой (C++):

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

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

Как правильно освободить память - C++
Здравствуйте все! Подскажите, как правильно освобождать память, выделенную под массив оператором new? int *Arr = new int; ... delete...

Как освободить память быстро? - C++
Функция malloc неправильно работает...Заполняется память быстро,а очищается долго,с чем это связано,кто знает #include&lt;iostream&gt; ...

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

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

6
ViktorKozlov
133 / 125 / 2
Регистрация: 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
Кротяка
5 / 5 / 0
Регистрация: 20.12.2010
Сообщений: 378
25.11.2013, 23:44  [ТС] #3
ViktorKozlov, скажите пожалуйста, как я должен освободить память при неправильном вводе данных чтобы заполнить массив новым значением?
0
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.11.2013, 07:12 #4
Цитата Сообщение от Кротяка Посмотреть сообщение
Есть массив: Код C++1
char Name[25];
Если массив такой (не динамически созданный), то специально освобождать ничего не нужно. При чтении новой строки в массив, старое содержимое удалится.
0
Кротяка
5 / 5 / 0
Регистрация: 20.12.2010
Сообщений: 378
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
855 / 753 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
27.11.2013, 05:27 #6
Цитата Сообщение от Кротяка Посмотреть сообщение
нужно выполнить проверку ввода данных и при надобности
Хоть напишите что такое выполнить проверку ввода данных
Угадал-неугадал что-ли ?
0
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.11.2013, 09:26 #7
Цитата Сообщение от Кротяка Посмотреть сообщение
alsav22, препод требует, ничего не поделаешь
Что требует? Освобождать память под статически созданным массивом?

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

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

Как правильно освободить память деструктором? - C++
Не могу понять, как освободить память деструктором... В общем, я объявляю в private динамический массив на 3 элемента, после чего память от...

Подскажите пожалуйста, как правильно освободить память - C++
Всем ку! Подскажите пожалуйста, как правильно удалить(освободить память) массива array2D. Array1D&lt;Elem&gt;* array2D = ...

Как освободить память в двумерном массиве в столбцах - C++
скажем так, чтобы освободить строку я пишу int **b; // // инициализирю массив delete b; // удаляю указатель(массив) в 3 позиции ...


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

Или воспользуйтесь поиском по форуму:
7
Yandex
Объявления
27.11.2013, 09:26
Ответ Создать тему
Опции темы

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