Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> работа оператора new, вопрос по адресам элементов массива 
V
    Опции темы
wolver17
  Дата 19.5.2016, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 15.5.2011

Репутация: нет
Всего: 1



Вопрос любознательного характера. Насколько я помню, элементы динамич. массива, выделенные в памяти оператором new хранятся ленточно, один за другим (поправьте если ошибаюсь)
Сделал банальный ввод двумерного массива с обнулением элементов, а посмотрев в debug'e адреса - почему-то недосчитался одного. Все элементы прыгали по 4 байта по адресу, но после последнего в строке и началом новой строки пропущен адрес в 4 байта, на что он тратиться?
Код

    ...
    int **x=new int*[n];
    Init_matrix(x, n, m);
    ...

void Init_matrix(int **temp, int n, int m)
{

    for(int i=0;i<n;i++)
    {
        temp[i]=new int[m];
        memset(temp[i],0, sizeof(int)*(m));
    }
}


интересует адрес с номером ...7430: 

скрин из debug'a

Это сообщение отредактировал(а) wolver17 - 19.5.2016, 21:28
PM MAIL   Вверх
feodorv
Дата 19.5.2016, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 11
Всего: 45



Цитата(wolver17 @  19.5.2016,  21:27 Найти цитируемый пост)
на что он тратиться?

Всё зависит от того, как работает Ваш аллокатор. Это может быть просто выравнивание данных (аллокация может осуществляться гранулярно по 8 или 16 байт), тогда оставшийся адрес ни на что не тратится. В "пропавшей" ячейке памяти (которая предваряет массив)  может храниться число выделенных оператором new[] элементов. Или же там может храниться адрес на внутреннюю структуру памяти, заполняемую аллокатором и содержащую какую-либо информацию об аллокации. Кто знает.




--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
baldman88
Дата 19.5.2016, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 18.1.2009

Репутация: 3
Всего: 7



В данном случае это, скорее всего, выравнивание. Попробуйте передать четное значение m и посмотрите, что получится.
PM MAIL   Вверх
wolver17
Дата 20.5.2016, 00:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 15.5.2011

Репутация: нет
Всего: 1



Вроде нашёл что это) Если new по образу и подобию СИ-шной malloc, то выделение памяти через строку указателей может вообще быть блочным:

аллокация new

и походу то мне просто повезло, что выделение памяти построчно прошло ровно через 4 байта в одном сегменте памяти  smile 
а вот перекинул код с форм на консоль  получил вот что (через AnsiString не получалось вывести):
получение адреса и значения адреса



Это сообщение отредактировал(а) wolver17 - 22.5.2016, 20:55
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0458 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.