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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 43, средняя оценка - 4.81
Union
17 / 17 / 2
Регистрация: 16.08.2010
Сообщений: 252
#1

Удалить массив - C++

13.03.2011, 16:27. Просмотров 6359. Ответов 8
Метки нет (Все метки)

Нужно полностью удалить созданный в приложении массив:
C++
1
2
3
4
5
6
7
8
9
char n=100;
struct mag
{
 char a[255];
 std::map<std::string, int> list;
 char b[255];
 int c[255];
 std::vector<int> lists;
}mas[n];
Как это правильно сделать?
Как я понял просто вот так:
C++
1
delete mas;
он не удалится?
Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.03.2011, 16:27
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Удалить массив (C++):

если массив не является знакочередующимся,то удалить из массива все положительные числа,в противном случае-удалить отрицательные элементы.после удален - C++
задан массив Х целых чисел. если массив не является знакочередующимся,то удалить из массива все положительные числа,в противном...

Сформировать одномерный массив, удалить первый элемент с заданным значением, сдвинуть массив циклически - C++
1)сформировать одномерный массив целых чисел 2)удалить первый элемент с заданным значением 3)сдвинуть массив циклически на К элементов...

Сформировать массив строк. Удалить из него одинаковые строки. Сформировать массив строк. Удалить из него К последних строк - C++
Сформировать массив строк. Удалить из него одинаковые строки. Сформировать массив строк. Удалить из него К последних строк.

удалить двумерный массив - C++
Здравствуйте, уважаемые. Встала тривиальная задача которую никак не получается решить(( float (*vertices); //есть указатель на...

Массив: Удалить из строки цифры - C++
Подскажите, мне необходимо написать программу, в которой при обращении к элементу массива нельзя использовать дополнительную переменную для...

Не могу удалить динамический массив - C++
В общем, выдает критическую ошибку: HEAP CORRUPTION DETECTED: after Normal block (#140) at 0x004452BF0. CRT detected that the...

8
silent_1991
Эксперт С++
4984 / 3041 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
13.03.2011, 16:55 #2
По-хорошему, код работать не должен, поскольку n - не константа. Но если принять, что GCC такой код схавал, то удалить этот массив вы никак не сможете, потому что он создан в автоматической памяти и, следовательно, уничтожится только автоматически, по окончании работы программы. Удалять вы можете только объекты, которые сами и создали в куче при помощи оператора new.
2
Union
17 / 17 / 2
Регистрация: 16.08.2010
Сообщений: 252
13.03.2011, 17:02  [ТС] #3
Вот немного поправил:
C++
1
2
3
4
5
6
7
8
9
#define ELEM 100
struct mag
{
 char a[255];
 std::map<std::string, int> list;
 char b[255];
 int c[255];
 std::vector<int> lists;
}mas[ELEM];
Это статический массив структур, содержащих char, int, ассоциативный контейнер map и контейнер vector.
Как cоздать и потом удалить такой массив через new и delete?
Спасибо
0
Ma3a
Эксперт С++
618 / 462 / 31
Регистрация: 28.01.2011
Сообщений: 605
13.03.2011, 17:06 #4
Вы говорите противоречащие вещи
Цитата Сообщение от Union Посмотреть сообщение
Это статический массив структур
и
Цитата Сообщение от Union Посмотреть сообщение
удалить такой массив через new и delete
Статический - значит создается не на куче( динамическая память , где можно самостоятельно освобождать и выделять память ), а в сегменте данных, где ни выделить во время выполнения программы, ни освободить память самостоятельно не представляется возможным, как было сказано ранее, память освободится только по завершении программы.
1
silent_1991
Эксперт С++
4984 / 3041 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
13.03.2011, 17:06 #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
struct mag
{
    char a[255];
    std::map<std::string, int> list;
    char b[255];
    int c[255];
    std::vector<int> lists;
};
 
int main()
{
    mag *mas = new mag [100];
    // Работа с mas
    delete [] mas;
 
    return 0;
}
1
Union
17 / 17 / 2
Регистрация: 16.08.2010
Сообщений: 252
13.03.2011, 17:10  [ТС] #6
Не, статический массив ничего кроме определенного неизменного его размера не значит. Т.е. при создании четко задано количество элементов и далее в процессе работы приложения оно не может меняться. Динамический массив - наоборот. В него могут добавляться и удаляться элементы. Как это происходит - уже другой вопрос, вопрос реализации.

Добавлено через 2 минуты
Цитата Сообщение от silent_1991 Посмотреть сообщение
По-хорошему, код работать не должен, поскольку n - не константа...
Почему же? Я может не сразу его создаю, а сначала вычисляю нужный мне размер. n не обязана быть константой.

Всем спасибо.
0
silent_1991
Эксперт С++
4984 / 3041 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
13.03.2011, 17:13 #7
Union, обязана. Именно поэтому вообще существует такая вещь, как динамическое выделение памяти. Иначе работал бы такой код:
C++
1
2
3
int n;
std::cin >> n;
int arr[n];
Да, может, в GCC он работает, но суть от этого не меняется, arr всё равно выделяется в стеке, а стек не резиновый, и n ограничена размером стека, тогда как при выделении памяти в куче размер ограничен только доступным объёмом памяти.

Добавлено через 23 секунды
Короче говоря, стандарт таких финтов ушами не допускает.
1
Union
17 / 17 / 2
Регистрация: 16.08.2010
Сообщений: 252
13.03.2011, 17:14  [ТС] #8
Т.е. получается что данный массив создаётся до начала выполнения кода программы и размер соответственно должен быть определен также до начала выполнения?
0
Ma3a
Эксперт С++
618 / 462 / 31
Регистрация: 28.01.2011
Сообщений: 605
13.03.2011, 17:16 #9
По сути да, если массив был объявлен вне функции, то будет размещен в секции данных, если в функции без модификатора static, то ему будет выделено фиксированное место на стеке.
1
13.03.2011, 17:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.03.2011, 17:16
Привет! Вот еще темы с ответами:

Как удалить динамический массив? - C++
Вот на самом простом запоролся.. int *M; M = new int ; как удалить не помню (

Символьный массив, удалить первый элемент - C++
Как в символьном массиве удалить первый элемент? Добавлено через 5 минут char s; for (i=1; i&lt;=strlen(s);i++) s+=s; Думаю...

Удалить динамический массив в деструкторе класса - C++
Здравствуйте, есть следующий код. Хочу удалить динамический массив в деструкторе, но не выходит, не видит массив. Если описываю массив в...

Не удаётся удалить массив new, утечка памяти - C++
Наблюдаю странное дело, не могу удалить массив float созданный через new h файл float* obj; cpp файл деструктор ...


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

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

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