Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/2: Рейтинг темы: голосов - 2, средняя оценка - 4.50
108 / 49 / 26
Регистрация: 24.10.2012
Сообщений: 56
1

delete pi++

12.01.2013, 23:36. Просмотров 485. Ответов 6
Метки нет (Все метки)

Всем Привет!
Возникла необходимость в динамическом выделении-освобождении памяти
Выделяю так:
C++
1
2
3
4
5
6
7
8
int *pi = NULL;
int count = 0;
//---
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  count = StrToInt(Edit1->Text);
  pi = new int[count];
}
Теперь нужно освободить. Пробовал так:
C++
1
2
3
4
5
void __fastcall TForm1::Button2Click(TObject *Sender)
{
  if(pi != NULL)
    delete[] pi;
}
Но думаю что это не правильно
Сделал так:
C++
1
2
3
4
5
6
void __fastcall TForm1::Button2Click(TObject *Sender)
{
  if(pi != NULL)
    for(int i = 0; i < count; i++)
      delete pi++;
}
Правильно ли я сделал? Может еще варианты есть?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.01.2013, 23:36
Ответы с готовыми решениями:

Оператор delete
совершенно простой код, вызвал у меня взрыв мозга int* a = new int(); int* b = a; *a = 5;...

DBGrid->Delete()
Как-то можно удалить строку из DBGrid без SQL запроса

delete vs. delete []
Всем привет, в разница использования delete и delete ? я читал, что delete используется для...

Backspace и Delete
функция обрабатывает ввод символов 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, +, –. По нажатию клавиши Esc ввод...

6
648 / 459 / 80
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
12.01.2013, 23:45 2
первая запись правильно.
C++
1
2
if(pi)
    delete[] pi;
1
Эксперт С++
8341 / 6090 / 607
Регистрация: 10.12.2010
Сообщений: 28,328
Записей в блоге: 29
12.01.2013, 23:45 3
Первый вариант правильный, второй -нет
1
108 / 49 / 26
Регистрация: 24.10.2012
Сообщений: 56
12.01.2013, 23:48  [ТС] 4
Спасибо!
0
Эксперт С++
8341 / 6090 / 607
Регистрация: 10.12.2010
Сообщений: 28,328
Записей в блоге: 29
12.01.2013, 23:49 5
Хотя не продумано до конца
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int *pi = NULL;
int count = 0;
//----------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  if(pi == NULL)   /* !!! */
   {
     count = StrToInt(Edit1->Text);
     pi = new int[count];
    }
  else ShowMessage("Уже выделено!");
}
//----------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
  if(pi != NULL)
     {
       delete[] pi;
       pi = NULL;   /* !!! */
     }
  else ShowMessage("Нечего удалять!");
}
0
108 / 49 / 26
Регистрация: 24.10.2012
Сообщений: 56
12.01.2013, 23:49  [ТС] 6
Откуда программа узнает число элементов? Раз у нее есть только адрес первого элемента, она должна вычислить длину массива на основании одного этого адреса. Как это делается, зависит от реализации, обычно используется следующий способ.
При выполнении «new Type[count]» программа выделяет памяти столько, чтобы в нее поместились не только объекты, но и беззнаковое целое (обычно типа size_t), обозначающее число объектов. В начало выделенной области пишется это число, дальше размещаются объекты. Компилятор при компиляции «new Type[count]» вставляет в программу код, который реализует эти свистелки
здесь нашел
0
648 / 459 / 80
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
12.01.2013, 23:51 7
Avazart,
C++
1
2
3
4
5
6
if(pi != NULL)
   {
     count = StrToInt(Edit1->Text);
     pi = new int[count];
    }
  else ShowMessage("Уже выделено!");
Память никогда не выделиться.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.01.2013, 23:51

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

delete void*
class MyClass{ public: int i; }; void main() { MyClass* MyObj = new MyClass; MyObj-&gt;i =...

TabControl->Delete
Вот код создания вкладки. NewTab = new TTabItem(this); NewTab-&gt;Parent = TabControl1;...

Написать аналог процедуры Delete. Процедурой Delete и функцией Copy не пользоваться
Написать аналог процедуры Delete. Процедурой Delete и функцией Copy не пользоваться. кто сможет?...

Используя delete по указателю, возвращенному new [] или delete [] указателем, возвращаемым new
Помогите ответить на вопрос, не могу понять суть вопроса (правильно ли понимаю, что будет если...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

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