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

Где - то слышал, что в указателе сохраняется информация о размере массива, верно ли это? - C++

Восстановить пароль Регистрация
 
SuperHero
Заблокирован
24.07.2014, 12:11     Где - то слышал, что в указателе сохраняется информация о размере массива, верно ли это? #1
Привет! Ну вот допустим:
C++
1
int *X = new int[10];
Можно ли по указателю X как то явно узнать, что он ссылается на непрерывный блок памяти, в котором подряд идут 10-ть интов ? Вроде какая то была фишка для этого ...

P.S.: аллокатор new выделает выравненный блок памяти?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.07.2014, 12:11     Где - то слышал, что в указателе сохраняется информация о размере массива, верно ли это?
Посмотрите здесь:

C++ Дано число n. Верно ли, что это число содержит ровно 3 одинаковых цифры
C++ Структура в С++ (На автовокзале сохраняется информация об автобусных рейсах:)
C++ Верно ли,что все элементы массива B входят в массив A?
Что это за знак >> прочитал что это сдвиг вправо? что он делает C++
C++ Дано натуральное четырехзначное число n.верно ли что это число содержит три одинаковые цифры
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Voivoid
 Аватар для Voivoid
580 / 256 / 12
Регистрация: 31.03.2013
Сообщений: 1,283
24.07.2014, 12:18     Где - то слышал, что в указателе сохраняется информация о размере массива, верно ли это? #2
Нет. Да
HighPredator
 Аватар для HighPredator
5342 / 1725 / 320
Регистрация: 10.12.2010
Сообщений: 5,108
Записей в блоге: 3
24.07.2014, 12:19     Где - то слышал, что в указателе сохраняется информация о размере массива, верно ли это? #3
Цитата Сообщение от SuperHero Посмотреть сообщение
Можно ли по указателю X как то явно узнать, что он ссылается на непрерывный блок памяти, в котором подряд идут 10-ть интов
Нет. Количество элементов действительно хранится по некоторому смещению относительно адреса указателя, но само это не стандартизировано. То есть формально все по разному на разных компиляторах, следовательно универсального метода нет.
Ilot
Модератор
Эксперт С++
1765 / 1140 / 221
Регистрация: 16.05.2013
Сообщений: 3,017
Записей в блоге: 5
Завершенные тесты: 1
24.07.2014, 12:21     Где - то слышал, что в указателе сохраняется информация о размере массива, верно ли это? #4
SuperHero, распределением памяти занимается операционная система. Вот у нее и спрашивайте.
SuperHero
Заблокирован
24.07.2014, 12:23  [ТС]     Где - то слышал, что в указателе сохраняется информация о размере массива, верно ли это? #5
Цитата Сообщение от HighPredator Посмотреть сообщение
но само это не стандартизировано
а можно хоть какой пример под микрософтовский компилятор и под GCC ?

Добавлено через 1 минуту
хмм
Ilot, с каких это пор ты модератором стал ? )))
HighPredator
 Аватар для HighPredator
5342 / 1725 / 320
Регистрация: 10.12.2010
Сообщений: 5,108
Записей в блоге: 3
24.07.2014, 12:27     Где - то слышал, что в указателе сохраняется информация о размере массива, верно ли это? #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
SuperHero, я наверное не сакцентировал внимание на еще одном выводе из сказанного -- реализация подобного руками есть костыль. А костыль == bad life choice. Не делайте так. Кстати фиг его даже знает в каком типе данных каждый компиль хранит этот самый тип, при каких настройках.
SuperHero
Заблокирован
24.07.2014, 12:34  [ТС]     Где - то слышал, что в указателе сохраняется информация о размере массива, верно ли это? #7
ну тогда ещё один нубский вопрос, аллокатор new всегда же выделает непрерывный блок памяти?
1. Он выровнен?
2. Можно ли как - то создать указатель, который бы указывал на прерывающийся блок памяти? Ну то есть это к тому, чтоб удалить из массива элемент посередине без реаллокации Наверное нельзя )
HighPredator
 Аватар для HighPredator
5342 / 1725 / 320
Регистрация: 10.12.2010
Сообщений: 5,108
Записей в блоге: 3
24.07.2014, 12:39     Где - то слышал, что в указателе сохраняется информация о размере массива, верно ли это? #8
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от SuperHero Посмотреть сообщение
Можно ли как - то создать указатель, который бы указывал на прерывающийся блок памяти? Ну то есть это к тому, чтоб удалить из массива элемент посередине без реаллокации Наверное нельзя )
В этом случае это уже сложно будет назвать массивом по определению. Это будет некоторое подобие двунаправленного списка. Плюс нереально станет делать адресную арифметику.
SuperHero
Заблокирован
24.07.2014, 12:41  [ТС]     Где - то слышал, что в указателе сохраняется информация о размере массива, верно ли это? #9
всем спасибо всем пока )
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.07.2014, 17:44     Где - то слышал, что в указателе сохраняется информация о размере массива, верно ли это?
Еще ссылки по теме:

C++ Дано натуральное четырехзначное число n. Верно ли что это число содержит три одинаковые цифры
Верно ли, что 2 массива отличаются не более, чем порядком следования членов C++
Верно ли, что сумма квадратов элементов массива есть пятизначное число? C++

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.07.2014, 17:44     Где - то слышал, что в указателе сохраняется информация о размере массива, верно ли это? #10
Цитата Сообщение от SuperHero Посмотреть сообщение
а можно хоть какой пример под микрософтовский компилятор
Для debug в 10-й студии:
C++
1
2
3
4
5
6
    char *str = new char[10];
    cout << ((int*)(str))[-4] << endl;
 
    double* arr = new double[10];
    int* pint = (int*)arr;
    cout << pint[-4] << endl;
Yandex
Объявления
24.07.2014, 17:44     Где - то слышал, что в указателе сохраняется информация о размере массива, верно ли это?
Ответ Создать тему
Опции темы

Текущее время: 17:31. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru