Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
1 / 1 / 4
Регистрация: 08.08.2013
Сообщений: 86
1

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

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

Author24 — интернет-сервис помощи студентам
есть код
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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.07.2015, 13:15
Ответы с готовыми решениями:

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

Сырой указатель на память выделенную через new[]
Добрый вечер, подскажите правильную перегрузку для указателя на память выделенную через new ...

Как получить ссылку на указатель или указатель на указатель в массиве?
В процессе реализации сортировки пузырьком натолкнулся на такую проблему: как поменять значения...

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

2
104 / 104 / 99
Регистрация: 30.06.2015
Сообщений: 272
01.07.2015, 13:22 2
А зачем через NEW если длинна массива известна ?
0
1 / 1 / 4
Регистрация: 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
01.07.2015, 14:04
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.07.2015, 14:04
Помогаю со студенческими работами здесь

Можно ли так выделить память в куче под указатель на массив?
Здравствуйте Можно ли выделить память в куче под указатель на массив например так:? int...

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

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

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


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru