|
0 / 0 / 0
Регистрация: 08.02.2013
Сообщений: 26
|
|
delete[] статической памяти18.05.2013, 03:56. Показов 8648. Ответов 45
Метки нет (Все метки)
1. Должна ли возникать ошибка (или падение программы) при применении delete[] к статической памяти? У меня (Microsoft Visual Studio 2005) никаких ошибок не возникает. Но, просто, сталкивался с тем, что на некой 64-х разрядной машине (Windows), при запуске моей 32-х разрядной программы (то есть в эмуляторе) она вылетала в месте где используется delete[] к статической переменной. А также встречал в интернете вопросы о ошибке при delete[] статической памяти, но там не указывался компилятор.
2. Если вылетание при delete[] статической памяти возможно, то как узнать какой указатель: на динамическую память или статическую. Теоретически мне это не предсnавляется сложным. Если этого нету в C/C++, то может такая возможность есть в WinApi? Вот, например, есть в функция в которую передается char*. И эта память освобождается в функции. Но в функцию ведь может быть передана и константа и указатель на статическую память.
0
|
|
| 18.05.2013, 03:56 | |
|
Ответы с готовыми решениями:
45
Переменные в статической и динамической памяти! Выделение статической памяти, не используя статические объекты Возможно ли обращение к статической памяти функции извне? |
|
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|
| 18.05.2013, 04:37 | |
|
За выделением и освобождением динамической памяти должен следить программист (в самом языке такого контроля нет). Если он за этим действительно следит, то не будет освобождать статическую (или автоматическую) память через delete. Как реагирует компилятор на такое освобождение неважно, в любом случае это ошибка.
2
|
|
|
0 / 0 / 0
Регистрация: 08.02.2013
Сообщений: 26
|
||||||||||||
| 18.05.2013, 05:35 [ТС] | ||||||||||||
Вопрос не о выделении и удалении памяти. Вопрос о определении: адрес указывает на кучу или на секцию данных, или стэк. Технически в этом проблем нет. Удаление памяти в функции экономит две строчки кода. Но в функцию может быть пердан указатель на статическую память, в этом проблема. Вот наглядные пример экономии строчек кода:
0
|
||||||||||||
|
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|||
| 18.05.2013, 05:55 | |||
|
1
|
|||
|
0 / 0 / 0
Регистрация: 08.02.2013
Сообщений: 26
|
|||
| 18.05.2013, 06:02 [ТС] | |||
0
|
|||
|
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|||||
| 18.05.2013, 06:10 | |||||
|
1
|
|||||
|
Неэпический
|
||||
| 18.05.2013, 06:11 | ||||
![]()
2
|
||||
|
Ушел с форума
|
|
| 19.05.2013, 19:03 | |
|
2
|
|
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|||
| 19.05.2013, 19:44 | |||
|
Добавлено через 2 минуты
1
|
|||
|
Ушел с форума
|
||
| 19.05.2013, 20:15 | ||
|
1
|
||
|
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
||
| 19.05.2013, 23:26 | ||
|
1
|
||
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
| 20.05.2013, 00:45 | |
Сообщение было отмечено как решение
Решение
alsav22, If not. Там же написано. Суть: delete[] можно использовать ТОЛЬКО на то, что было выделено через new[], иначе UB.
3
|
|
|
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|
| 20.05.2013, 00:55 | |
|
Понял.
0
|
|
|
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
|
|
| 20.05.2013, 01:05 | |
|
шо за ересь? "статическая память"... какой наркоман это сформулировал?
Добавлено через 2 минуты еще рассуждают что-то... компетентный контенгент. Классический цэпэпэшник.
0
|
|
|
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|
| 20.05.2013, 01:15 | |
|
Как ни формулируй, все понимают, о чём речь идёт.
0
|
|
|
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
|
|
| 20.05.2013, 01:29 | |
|
точнее "делают вид что понимают"
0
|
|
|
Ушел с форума
|
|
| 20.05.2013, 01:48 | |
Сообщение было отмечено как решение
Решение
2
|
|
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
||
| 20.05.2013, 02:23 | ||
|
Убежденный,
1
|
||
| 20.05.2013, 10:36 | |
|
1
|
|
|
0 / 0 / 0
Регистрация: 08.02.2013
Сообщений: 26
|
||
| 20.05.2013, 19:56 [ТС] | ||
|
Вопрос совсем не несуразный. Раз на него до сих пор не ответили. Поначалу писали что это ошибка, а оказалось что стандарт это не определяет как ошибку. Ну и раз стандарт это определяет как undefined поведение, то остается в силе мой вопрос об обработке этой ситуации компиляторами, в частности компилятором Microsoft. Впрочем я итак знаю, что программа, скомпилированная компилятором Microsoft, ничего не делает когда встречает delete[] по отношению к статической памяти. Потому что я ни разу не видел, чтобы программы мои падали.
0
|
||
| 20.05.2013, 19:56 | |
|
Помогаю со студенческими работами здесь
20
delete[] *pointer vs. delete pointer и утечка памяти Освобождение памяти delete Delete[] и утечка памяти Утечка памяти и delete Очистка памяти delete[]; Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|