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

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

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

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

25.11.2013, 23:04. Просмотров 301. Ответов 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 минуты
может хоть кто то сказать? просто "да" или "нет"?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.11.2013, 23:04     Освободить память и записать по новой
Посмотрите здесь:

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

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

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

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

Освободить память вектора векторов без swap - C++
Собственно будет ли &quot;Swap-To-Fit&quot; std::vector&lt;std::vector&lt;double&gt;&gt; m_coefficients; . . . ...

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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);
копирование строки в саму себя. Идея, в принципе, интересная, но смысловой нагрузки опять же никакой не несет
Кротяка
5 / 5 / 0
Регистрация: 20.12.2010
Сообщений: 378
25.11.2013, 23:44  [ТС]     Освободить память и записать по новой #3
ViktorKozlov, скажите пожалуйста, как я должен освободить память при неправильном вводе данных чтобы заполнить массив новым значением?
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.11.2013, 07:12     Освободить память и записать по новой #4
Цитата Сообщение от Кротяка Посмотреть сообщение
Есть массив: Код C++1
char Name[25];
Если массив такой (не динамически созданный), то специально освобождать ничего не нужно. При чтении новой строки в массив, старое содержимое удалится.
Кротяка
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;
    }
так правильно, скажите?
MrCold
854 / 752 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
27.11.2013, 05:27     Освободить память и записать по новой #6
Цитата Сообщение от Кротяка Посмотреть сообщение
нужно выполнить проверку ввода данных и при надобности
Хоть напишите что такое выполнить проверку ввода данных
Угадал-неугадал что-ли ?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.11.2013, 09:26     Освободить память и записать по новой
Еще ссылки по теме:

Как освободить память занимаемую вектором и явно вернуть системе? - C++
Здравствуйте! Вопрос: Как освободить память занимаемую вектором и явно вернуть системе?

Как правильно освободить память после работы с динамическим массивом - C++
Здравствуйте! Помогите понять в чём проблема при освобождении памяти. Простой пример: #define _CRT_SECURE_NO_WARNINGS #include...

записать в файл с новой строки - C++
p.sr_eval='\n'; p=p+i; fwrite(&amp;(*p), sizeof(enrollee),1,f); хочу записывать каждый следующий объект структуры в файл с новой строки....

Как записать блок данных в память ? - C++
Есть ли какая нибудь функция типа fwrite(), которая может писать блоки данных разной длины, но из памяти в память ? Например есть...


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

Или воспользуйтесь поиском по форуму:
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.11.2013, 09:26     Освободить память и записать по новой #7
Цитата Сообщение от Кротяка Посмотреть сообщение
alsav22, препод требует, ничего не поделаешь
Что требует? Освобождать память под статически созданным массивом?

Добавлено через 2 минуты
Цитата Сообщение от Кротяка Посмотреть сообщение
так правильно, скажите?
Компилятор не спрашивали?
Yandex
Объявления
27.11.2013, 09:26     Освободить память и записать по новой
Ответ Создать тему
Опции темы

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