Нюансы с динамическими переменными?
//*******************
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!
char *p;
p = new char;
p = "двадцать пять";
delete p;
А ВОТ ЭТОТ ВАРИАНТ НЕ РАБОТАЕТ!!!
и delete [] p не помогает.
//*******************
Здесь ты работаешь с вектором типа char
изначально объяви его правильно.
Вот так:
char * p = new char[13];
// так как у тебя в строке 13 символов.
p = "двадцать пять";
delete [] p;
Вот теперь всё должно работать.
Будет работать вариант следующий:
char *p;
p = new char;
p = "bag";
p = 0; // не понятно!
delete p;
То же самое и для масива, я проверял.
Вот только что это за ноль, и освобождается ли память??? Нет ли способа попрофессиональнее?
p = new char;
p = "bag";
p = 0; // не понятно!
delete p;
Мне так кажется что ошиблись вы чуть чуть р=0; тут вы присваиваете нулевой адрес указателю, и тут не совсем понятно что делаете p="bag"; ?
может быть так ?
*p="bag";
delete p;
Вы, вообще, в курсе, что делают 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;
char *p;
p = new char;
p = "bag";
p = 0; // не понятно!
delete p;
Мне так кажется что ошиблись вы чуть чуть р=0; тут вы присваиваете нулевой адрес указателю, и тут не совсем понятно что делаете p="bag"; ?
может быть так ?
*p="bag";
delete p;
отвечаю да знаю что такое 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,
// т.е. пытаетесь освободить НИЧТО
Ребята, вы на бейсике пишете?
Учите матчасть!
Ну вы меня порадовали :о))
Вы, вообще, в курсе, что делают new, delete и = ?
char *p; // объявили указатель на char
p = new char; // создали в памяти буфер размером sizeof(char), т.е. один байт
// и занесли адрес начала этого буфера в p
// Указатель p указывает на созданный буфер
p = "bag"; // Теперь занесли в указатель адрес начала области памяти,
// где содержиться константа "bag".
// При этом уже ничто не указывает на раннее созданный буффер.
// Налицо утечка памяти
p = 0; // Обнуляете указатель, теперь он вообще никуда не указывает.
delete p; // Пытаетесь освободить область памяти, на которую указывает p,
// т.е. пытаетесь освободить НИЧТО
Ребята, вы на бейсике пишете?
Учите матчасть!
ну вы блин даёте....
Я все понимаю: все мы с чувством юмора. И, тем более, понимаю, что неправильно использую указатель на массив char. До сих пор работал с числовыми динамическими переменными и все было путем, а теперь нужно сделать типа char* и не работает. Напишите, пожалуйста, три-четыре строки грамотной реализации; буду очень признателен! И еще вопрос такой: если использовать взятие адреса &p, то обращение будет к той же области памяти, или нет?
char* chArr[500]
LPTSTR lpszString = chArr[500]
lpszString = "tra la la"
delete lpszString
можно и стоит сначала сделать
#define arrSize 1000 или сколько тебе надо, чтобы не лазить по всему коду и не менять потом
Это пишется так:
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]
Пасиба всем!!!