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

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

Восстановить пароль Регистрация
 
fridi
-8 / 40 / 1
Регистрация: 21.09.2009
Сообщений: 145
17.09.2012, 14:16     Удаление памяти #1
Здравствуйте! есть функция
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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
xADMIRALx
 Аватар для xADMIRALx
66 / 60 / 1
Регистрация: 09.06.2012
Сообщений: 291
17.09.2012, 14:37     Удаление памяти #2
fridi, Тогда уже не удаляйте а очищайте,если она вам потом понадобится

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

UPD

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

Вы что хотите-то?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 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     Удаление памяти
Ответ Создать тему
Опции темы

Текущее время: 13:59. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru