Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Spirit370
1 / 1 / 2
Регистрация: 08.08.2013
Сообщений: 86
#1

Как правильно удалять выделенную память под указатель на указатель? - C++

01.07.2015, 13:15. Просмотров 384. Ответов 2
Метки нет (Все метки)

есть код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
using namespace std;
void sort_1(const int **&const ptr,const int& N)
{
    for (int i = N - 1; i >= 0; i--)
    {
        for (int j = 0; j < i; j++)
        {
            if (*ptr[j] > *ptr[j + 1])
            {
                const int *tmp = ptr[j];
                ptr[j] = ptr[j + 1];
                ptr[j + 1] = tmp;
            }
        }
    }
}
void ptr_out(const int **&const ptr, const int& N)
{
    for (int i = 0; i < N; i++)
    {
        cout << ptr[i] << "  =   " << *ptr[i] << endl;
    }
}
int main()
{
 
    srand(time(0));
    int const N = 10;
    int mas[N];
    char exit = ' ';
do
{
    for (int i = 0; i < N; i++)
    {
        mas[i] = 1 + rand() % 100;
    }
    const int **ptr = new const int *[N]{&mas[0], &mas[1], &mas[2], &mas[3], &mas[4],
        &mas[5], &mas[6], &mas[7], &mas[8], &mas[9]};
    cout << "               ptr = " << ptr << endl;
 
    ptr_out(ptr, N);
 
    sort_1(ptr, N);
    
    cout << endl << endl << "         SORT " << endl;
 
    ptr_out(ptr, N);
    
    delete[] ptr;
 
    cout << "Exit(y/n)?";
    exit = getch();
}
while (exit != 'Y' || exit != 'y');
}

Выделяется память:
C++
1
2
const int **ptr = new const int *[N]{&mas[0], &mas[1], &mas[2], &mas[3], &mas[4],
        &mas[5], &mas[6], &mas[7], &mas[8], &mas[9]};
и после етого
C++
1
delete[] ptr;
вроде бы все ровно, но я сомневаюсь. Я правильно высвободил память?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.07.2015, 13:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как правильно удалять выделенную память под указатель на указатель? (C++):

Функция, принимающая указатель и число байт и выделяющая память под указатель - C++
Здравствуйте. Задача легкая, но почему-то завис Нужно написать функцию, принимающую указатель и число байт и выделяющую память под...

Сырой указатель на память выделенную через new[] - C++
Добрый вечер, подскажите правильную перегрузку для указателя на память выделенную через new #include &lt;iostream&gt; using namespace...

Как получить ссылку на указатель или указатель на указатель в массиве? - C++
В процессе реализации сортировки пузырьком натолкнулся на такую проблему: как поменять значения указателей, передаваемых в функцию. Если...

Проверка выделена ли память под указатель - C++
Уважаемые программисты!!!!! подскажите пожалуйста можно ли каким-либо способом проверить в условном операторе, выделена ли память под...

Как и когда правильно освобождать динамически выделенную память? - C++
Доброго времени суток! Задалась вопросом, заданным в заголовке темы &quot;Как и когда правильно освобождать динамически выделенную...

Как передвигать указатель чтобы выделить память под новый элемент и добавить новый элемент в массив? - C++
Допустим есть некое условие,нам нужно при каждом его выполнении выделить память под новый элемент и добавить его в массив. Вопрос:Как...

2
ThePlague
101 / 101 / 61
Регистрация: 30.06.2015
Сообщений: 272
01.07.2015, 13:22 #2
А зачем через NEW если длинна массива известна ?
0
Spirit370
1 / 1 / 2
Регистрация: 08.08.2013
Сообщений: 86
01.07.2015, 14:04  [ТС] #3
я просто експерементирую

Добавлено через 31 минуту
Ладно, я переписал, но можно как-то иннициализировать массив указателей без создания массива ?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
using namespace std;
void sort_1( int **&const ptr,const int& N)
{
    for (int i = N - 1; i >= 0; i--)
    {
        for (int j = 0; j < i; j++)
        {
            if (*ptr[j] > *ptr[j + 1])
            {
                 int *tmp = ptr[j];
                ptr[j] = ptr[j + 1];
                ptr[j + 1] = tmp;
            }
        }
    }
}
void ptr_out( int **&const ptr, const int& N)
{
    for (int i = 0; i < N; i++)
    {
        cout << ptr[i] << "  =   " << *ptr[i] << endl;
    }
}
int main()
{
 
    srand(time(0));
    int const N = 10;
    int mas[N];
    char exit = ' ';
do
{
    int mas[N];
    int *p[N];
    int **pp{ p };
    for (int i = 0; i < N; i++)
    {
        mas[i] = 1 + rand() % 99;
    }
    for (int i = 0; i < N; i++)
    {
        p[i] = &mas[i];
    }
 
    cout << "               ptr = " << pp << endl;
 
    ptr_out(pp, N);
 
    sort_1(pp, N);
    
    cout << endl << endl << "         SORT " << endl;
 
    ptr_out(pp, N);
    
    cout << "Exit(y/n)?";
    exit = getch();
}
while (exit != 'Y' || exit != 'y');
}
Добавлено через 9 минут
ThePlague
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.07.2015, 14:04
Привет! Вот еще темы с ответами:

Как освободить память, выделенную через new под матрицу? - C++
Здравствуйте!!! Почему-то никак не освобождается память, выделенная оператором new под двумерный массив типа char,- как только идет...

Расскажите, как здесь работает указатель на указатель? - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;locale.h&gt; using namespace std; void main() { setlocale(LC_ALL, &quot;rus&quot;); ...

Почему указатель на указатель объявляется как float **A; - C++
Почему float?

Не знаю как правильно передать указатель - C++
В общем для начала приложу код ( не пугайтесь , что придется много читать , из этого кода изучить нужно лишь 2 функции и данные структуры )...


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

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

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