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

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

Войти
Регистрация
Восстановить пароль
 
fridi
-8 / 40 / 1
Регистрация: 21.09.2009
Сообщений: 145
#1

Удаление памяти - C++

17.09.2012, 14:16. Просмотров 499. Ответов 4
Метки нет (Все метки)

Здравствуйте! есть функция
char * systeminfo::getUserName()
{
char *buf=new char [20];
strcpy(buf,"aaa");
return buf;
}
как правильно удалять такую память?
main()
{
char *sysName=systeminfo::getUserName();

//delete[]sysName;//так удаляется полностью вся память на что указывает sysName;
//ок произведем небольшой опыт.
int a_sysName=(int)sysName;//Определяем адрес на что указывает sysName; a_sysName=&buf[0];
//настроим еще один указатель на эту область памяти
char *pt=(char*)a_sysName; //Берем адресс
//Теперь удаляем указатель оригинальный
delete sysName;
/* Вот дальше идет интересно почему pt не указывает на строку "aaa"?
Ведь я только удалял указатель sysName а не на что он указывает стало быть строка по адресу
в a_sysName -адресс первый байт там должна хранится "aaa";
*/
Вообщем почему когда я удаляю
delete sysName;
память удаляется так-же как если бы я ее удалил через
delete[] sysName;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.09.2012, 14:16     Удаление памяти
Посмотрите здесь:

Удаление динамической памяти C++
C++ Удаление структуры из динамической памяти
удаление памяти C++
Удаление памяти посредством delete[] C++
Освобождение памяти, удаление бинарного дерева C++
C++ Удаление динамической памяти
C++ Удаление объекта и освобождение памяти
C++ Удаление двумерного динамического массива из памяти
Удаление выделенной памяти C++
Удаление памяти C++
Удаление new из динамической памяти C++
C++ Удаление памяти, на которую ссылается указатель

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
xADMIRALx
67 / 61 / 1
Регистрация: 09.06.2012
Сообщений: 291
17.09.2012, 14:37     Удаление памяти #2
fridi, Тогда уже не удаляйте а очищайте,если она вам потом понадобится

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

UPD

Ну а если вам нужен именно указатель *sysName,то присваивайте ему значение а не адрес
kotleta
42 / 42 / 11
Регистрация: 13.09.2012
Сообщений: 196
17.09.2012, 14:47     Удаление памяти #3
Я скорее всего просто плохо соображаю, но то, что вы написали в первом посте, я в упор не могу понять..

Вы что хотите-то?
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
17.09.2012, 15:01     Удаление памяти #4
C++
1
2
3
4
5
6
char * systeminfo::getUserName()
{
char *buf=new char [20];
strcpy(buf,"aaa");
return buf;
}
C++
1
char *sysName=systeminfo::getUserName();
Удаляться должно через delete[].

C++
1
delete sysName;
Это UB. Компилятор может сделать, что хочет.
fridi
-8 / 40 / 1
Регистрация: 21.09.2009
Сообщений: 145
17.09.2012, 15:18  [ТС]     Удаление памяти #5
тему можно закрыть
Yandex
Объявления
17.09.2012, 15:18     Удаление памяти
Ответ Создать тему
Опции темы

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