|
3 / 3 / 1
Регистрация: 26.02.2011
Сообщений: 99
|
|
Поясните, пожалуйста, несколько моментов про выделение памяти15.12.2012, 16:58. Показов 2206. Ответов 19
Метки нет (Все метки)
Ребят объясните:
int* a; a = new a(1); в первой строке указатель ссылается на какуюто память, те она уже выделена и занять ее ни кто не может? во второй строке new выделяет память и возвращает указатель, при этом указатель `а` не меняется! хотя new вернул другой указатель как все это согласовывается где найти статейку как это работает?
0
|
|
| 15.12.2012, 16:58 | |
|
Ответы с готовыми решениями:
19
Несколько моментов про хранение в куче и в стеке Поясните, пожалуйста, условие задачи про Дек в Дельфи Про выделение памяти |
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
| 15.12.2012, 17:16 | |
|
1. В первой строке память ещё не выделена.
2. Всегда надо или сразу выделять память в декларации, или сразу в декларации присваивать указателю NULL, или nullptr. А в случае полей объектов в конструкторе. 3. new не возвращает указатель, он возращает адрес, который есть значение указательного типа. Именно значение, а указателем называется переменная для хранения адреса, или именованная константа, чьё значение - адрес. Во втором случае указатель константный. new переменных с константами не возвращает, он возвращает значение. 4. Присваивание указателю адреса меняет значение указателя, вероятность обратного
2
|
|
|
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
|
|
| 15.12.2012, 17:21 | |
|
vdvoid, чепуха у вас написана.
0
|
|
|
16 / 5 / 2
Регистрация: 15.12.2012
Сообщений: 26
|
|||
| 15.12.2012, 17:35 | |||
|
Оператор new выделяет ячейку памяти под указатель и присваивает указателю адрес на эту ячейку. Да, кстати, должно быть a = new int(1);
0
|
|||
|
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
|
|||
| 15.12.2012, 17:40 | |||
|
Добавлено через 1 минуту
0
|
|||
|
16 / 5 / 2
Регистрация: 15.12.2012
Сообщений: 26
|
||
| 15.12.2012, 17:40 | ||
|
0
|
||
|
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
|
|
| 15.12.2012, 17:42 | |
|
0
|
|
|
16 / 5 / 2
Регистрация: 15.12.2012
Сообщений: 26
|
|
| 15.12.2012, 17:45 | |
|
Я вот про это:
0
|
|
|
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
|
||
| 15.12.2012, 18:08 | ||
|
А в release скомпилить и запустить .exe? Там то нет отладочной информации - приложение должно свалится
0
|
||
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
| 15.12.2012, 18:13 | |
|
0
|
|
|
14 / 14 / 1
Регистрация: 20.04.2010
Сообщений: 102
|
||||||||||||||||||
| 15.12.2012, 18:43 | ||||||||||||||||||
указатель - переменная, хранящая адрес некоторого объекта в динамически распределяемой памяти (heap). объявление переменной подразумевает выделение под нее памяти в программном стеке. но объявление переменной не означает ее инициализацию (определение). то есть, на данном этапе указатель создан, но не инициализирован адресом. он никуда не ссылается ( у него нет референта ) конечно стек грязный, и физически в а на момент создания будет какое-то число, но оно не имеет смысла. это не адрес, а хаотичный набор бит. поэтому, например, компилятор Visual Studio выдаст вам ошибку "используется не инициализированная переменная", если вы попробуете использовать такой указатель.
если напишите
а используя оператор разыменования указателя (*), можно обратиться к самой переменной, адрес которой содержится в а. например
0
|
||||||||||||||||||
|
3 / 3 / 1
Регистрация: 26.02.2011
Сообщений: 99
|
||||||
| 17.12.2012, 00:23 [ТС] | ||||||
|
да непонятно вот что:
Добавлено через 8 минут это я все понимаю что вы написали, я опечатался( спешил, непонятно вот что:
компилятор g++
0
|
||||||
|
3 / 3 / 1
Регистрация: 26.02.2011
Сообщений: 99
|
||||||
| 17.12.2012, 00:28 [ТС] | ||||||
|
еще вот что интересно
0
|
||||||
|
3 / 3 / 1
Регистрация: 26.02.2011
Сообщений: 99
|
||||||||||||||||
| 17.12.2012, 01:07 [ТС] | ||||||||||||||||
|
про перекрытие не слышал остальное хорошо знаю
Добавлено через 27 минут я так понимаю, сорри за тупость)
0
|
||||||||||||||||
|
Неэпический
|
|
| 17.12.2012, 01:33 | |
|
1
|
|
|
3 / 3 / 1
Регистрация: 26.02.2011
Сообщений: 99
|
|
| 17.12.2012, 01:36 [ТС] | |
|
спасибо годная ссылка)
на стековерфлов прочел: The compiler generates machine code for that. When the compiler sees CSomeClass* object = new CSomeClass(); (new statement) it generates code that calls the appropriate operator new() (which allocates memory), calls the right constructor, calls destructors of all fully constructed subobjects in case of exception, calls operator delete() in case an exception occurs during construction. All this is done by extra machine code generated by the C++ compiler for that simply looking statement.
0
|
|
| 17.12.2012, 01:36 | |
|
Помогаю со студенческими работами здесь
20
Поясните пару моментов Java и Android Studio не очень понял про динамическое выделение памяти. Выделение памяти (CodeGear RAD Studio 2009 - C++ builder). Выделение памяти - консоль vs SDIApp Несколько моментов программирования Несколько не понятных моментов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога
Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
|