Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.09.2015, 16:14   #11
SAMOUCHKA
Форумчанин
 
Регистрация: 07.08.2011
Сообщений: 576
По умолчанию

во вы понаписали. Собственно вопрос был- как время исполнения узнает сколько памяти освободить? программист то это не указывает
SAMOUCHKA вне форума Ответить с цитированием
Старый 21.09.2015, 16:20   #12
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

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


Также был введен operator delete, принимающий размер освобождаемого куска, но это другая история :-)
Croessmah вне форума Ответить с цитированием
Старый 21.09.2015, 18:31   #13
taras-proger
Подтвердите свой е-майл
 
Регистрация: 12.11.2014
Сообщений: 470
По умолчанию

Цитата:
Сообщение от SAMOUCHKA Посмотреть сообщение
Код:
int *p;
p = new int[a];
delete []p;
ясно что во время компиляции, длинна массива ни известна.
Отсюда я делаю вывод, что она хранится где то в среде выполнения, ведь нужно знать сколько элементов удалить.
По чему, тогда нельзя вычислить длину массива? delete как то ее узнает
Она хранится рядом с самими массивом. Но где именно и как именно? Стандартом это не оговорено. Версия delete заведомо соответствует реализации хранения размера конкретным компилятором, так как производится им же. А приложение? Можно вляпаться даже при переходе на другую версию того же компилятора, или даже после патча компилятора.

Цитата:
Сообщение от pu4koff Посмотреть сообщение
В плюсах изначально нет массивов как таковых, поэтому соответствующие методы программистам и не предоставляются.
Одна и та же запись может означать как один элемент по указателю, так и набор элементов. Причем этот набор не обязательно будет от начала выделенной памяти и до конца.
В общем, пишите себе как принято с передачей в функции указателя на элемент и максимального кол-ва элементов, иначе в один прекрасный день передадут указатель на третий элемент и функция поломается.
Если делать нормальный массив в языке, то там добавятся и функции и проверка на выход за границы и прочие радости, которые просадят производительность, что не будет соответствовать фишке плюсов.
Квадратные скобки - признак массива. Указатель то одинаков, что на массив, что на его элемент. Но освобождают их разными операторами и только один из них читает размер массива. И проверка на выход за границы не обязательна при поддержке массивов, она делается только при поддержке ограниченных массивов.

Последний раз редактировалось Stilet; 21.09.2015 в 20:26.
taras-proger вне форума Ответить с цитированием
Старый 21.09.2015, 20:11   #14
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Цитата:
Указатель то одинаков, что на массив, что на его элемент.
да ладно?
Код:
    int arr [10] ;
    int * p = arr+3 ;//Вот он указатель на int, а попутно и на элемент массива
    int (*p_arr)[10] = &arr ;//а вот указатель на массив
Цитата:
Квадратные скобки - признак массива.
квадратные скобки не только с массивами связаны.
Croessmah вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Python. В чем отличие Entry.delete(0, END) от Entry.delete(0.0, END) и еще вопрос pompiduskus PHP 4 12.08.2014 23:17
delete [] nazavrik Общие вопросы C/C++ 6 15.01.2010 22:46
error C2541: 'delete' : cannot delete objects that are not pointers novokhatsky Общие вопросы C/C++ 2 14.12.2009 10:25
Перегрузка операций new, new[], delete, delete[] IgorKr Общие вопросы C/C++ 1 22.10.2008 12:14