Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Нюансы с динамическими переменными?

462
23 октября 2002 года
little brother
81 / / 18.10.2002
Может кто подскажет как создавать и удалять динамические переменные. Я в курсе, что new и delete это делают, но...

//*******************
int *p;
p = new int;
*p = 25;
delete p;
САМО СОБОЙ РАБОТАЕТ.
//*******************

//*******************
char *p;
p = new char;
delete p;
САМО СОБОЙ РАБОТАЕТ.
//*******************

//*******************
char *p;
p = new char;
p = "двадцать пять";
delete p;
А ВОТ ЭТОТ ВАРИАНТ НЕ РАБОТАЕТ!!!
и delete [] p не помогает.
//*******************
Не могу удалить ненулевую переменную типа char!
985
23 октября 2002 года
kostas
34 / / 20.07.2000
//*******************
char *p;
p = new char;
p = "двадцать пять";
delete p;
А ВОТ ЭТОТ ВАРИАНТ НЕ РАБОТАЕТ!!!
и delete [] p не помогает.
//*******************

Здесь ты работаешь с вектором типа char

изначально объяви его правильно.
Вот так:
char * p = new char[13];
// так как у тебя в строке 13 символов.
p = "двадцать пять";
delete [] p;
Вот теперь всё должно работать.
462
23 октября 2002 года
little brother
81 / / 18.10.2002
В том-то и дело, что не работает!
Будет работать вариант следующий:

char *p;
p = new char;
p = "bag";
p = 0; // не понятно!
delete p;

То же самое и для масива, я проверял.
Вот только что это за ноль, и освобождается ли память??? Нет ли способа попрофессиональнее?
2.6K
23 октября 2002 года
Брат
2 / / 23.10.2002
char *p;
p = new char;
p = "bag";
p = 0; // не понятно!
delete p;
Мне так кажется что ошиблись вы чуть чуть р=0; тут вы присваиваете нулевой адрес указателю, и тут не совсем понятно что делаете p="bag"; ?
может быть так ?
*p="bag";
delete p;
3
23 октября 2002 года
Green
4.8K / / 20.01.2000
Ну вы меня порадовали :о))
Вы, вообще, в курсе, что делают new, delete и = ?

char *p; // объявили указатель на char
p = new char; // создали в памяти буфер размером sizeof(char), т.е. один байт
// и занесли адрес начала этого буфера в p
// Указатель p указывает на созданный буфер
p = "bag"; // Теперь занесли в указатель адрес начала области памяти,
// где содержиться константа "bag".
// При этом уже ничто не указывает на раннее созданный буффер.
// Налицо утечка памяти
p = 0; // Обнуляете указатель, теперь он вообще никуда не указывает.
delete p; // Пытаетесь освободить область памяти, на которую указывает p,
// т.е. пытаетесь освободить НИЧТО

Ребята, вы на бейсике пишете?
Учите матчасть!

Цитата:
Originally posted by Брат
char *p;
p = new char;
p = "bag";
p = 0; // не понятно!
delete p;
Мне так кажется что ошиблись вы чуть чуть р=0; тут вы присваиваете нулевой адрес указателю, и тут не совсем понятно что делаете p="bag"; ?
может быть так ?
*p="bag";
delete p;

2.6K
23 октября 2002 года
Брат
2 / / 23.10.2002
to Green - это ко мне вы отнесли ниже сказанное?
отвечаю да знаю что такое new и delete
Цитата:
Originally posted by Green
Ну вы меня порадовали :о))
Вы, вообще, в курсе, что делают new, delete и = ?

char *p; // объявили указатель на char
p = new char; // создали в памяти буфер размером sizeof(char), т.е. один байт
// и занесли адрес начала этого буфера в p
// Указатель p указывает на созданный буфер
p = "bag"; // Теперь занесли в указатель адрес начала области памяти,
// где содержиться константа "bag".
// При этом уже ничто не указывает на раннее созданный буффер.
// Налицо утечка памяти
p = 0; // Обнуляете указатель, теперь он вообще никуда не указывает.
delete p; // Пытаетесь освободить область памяти, на которую указывает p,
// т.е. пытаетесь освободить НИЧТО

Ребята, вы на бейсике пишете?
Учите матчасть!

380
23 октября 2002 года
Arestov
285 / / 20.09.2000
ну вы блин даёте....
462
24 октября 2002 года
little brother
81 / / 18.10.2002
Я все понимаю: все мы с чувством юмора. И, тем более, понимаю, что неправильно использую указатель на массив char. До сих пор работал с числовыми динамическими переменными и все было путем, а теперь нужно сделать типа char* и не работает. Напишите, пожалуйста, три-четыре строки грамотной реализации; буду очень признателен! И еще вопрос такой: если использовать взятие адреса &p, то обращение будет к той же области памяти, или нет?
2.3K
24 октября 2002 года
Pyh
3 / / 22.10.2002
воде бы так нужно ето всё грамотно делать

char* chArr[500]
LPTSTR lpszString = chArr[500]
lpszString = "tra la la"
delete lpszString

можно и стоит сначала сделать
#define arrSize 1000 или сколько тебе надо, чтобы не лазить по всему коду и не менять потом
2.6K
24 октября 2002 года
paskin
1 / / 24.10.2002
Ну вы даете...

Это пишется так:

const char* pConstString="My string";

char *pString = NULL;
pString = new char[strlen(pConstString)+1]

strcpy(pString,pConstString);

...

delete pString;

strlen(pConstString)+1 - потому что строка в С
завершается нулевым символом, т.е. "1234567890"
это char[11]
462
25 октября 2002 года
little brother
81 / / 18.10.2002
Пасиба всем!!!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог