powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Размер динамического массива
25 сообщений из 51, страница 2 из 3
Размер динамического массива
    #38132625
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lnix, тебе повезло попасть в один из лучших форумов рунета. Разумеется на все
вопросы тебе тут не ответят и не все хотелки воплотят но ты имеешь уникальную
возможность привлекать специалистов высокого класса (реально) к решению проблем
БЕСПЛАТНО. Другого форума с лучшим фидбэком ты не найдешь. Я гарантирую это.
...
Рейтинг: 0 / 0
Размер динамического массива
    #38132639
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Да, вроде, нет в моей фразе и тени нетерпимости. Может тебе показалось?
...
Рейтинг: 0 / 0
Размер динамического массива
    #38132948
lnix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Я в курсе что это один из лучших форумов Рунета.
...
Рейтинг: 0 / 0
Размер динамического массива
    #38132975
lnixНе, мне нужно именно размер динамического массива.
Вектор мне не нужен. В этом то вся и затыка.
У меня функция формирует массив структур, помещает в память и возвращает указатель.
А уже остальные над этими данными глумятся.
Нужен. Поменьше глупости и будет нужен. Уж такие простые вещи ваши "остальные" пусть выучат, либо из С, либо из С++.

В С++ узнать размер динамического массива size_t size_arr = arr.size();, узнать сколько зарезервировано памяти size_t rsize_arr = arr.capacity();, получить указатель на него auto ptr = arr.data();, а называется он вектор: std::vector<int> arr(100); и память освобождает сам, никаких delete не нужно.

В C невозможно узнать размер динамического массива, можно только получить размер зарезервированной памяти: unsigned int rsize_arr = _msize(arr); - и то это нестандартная и непереносимая функция. А создается он так: int* arr = new int [10]; и в конце обязательно нужно удалять: delete arr[];
...
Рейтинг: 0 / 0
Размер динамического массива
    #38132977
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поменьше глупостиА создается он так: int* arr = new int [10];

Вот только оператора new в С нет и не было. Он тоже принадлежит С++.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Размер динамического массива
    #38132993
Dimitry SibiryakovПоменьше глупостиА создается он так: int* arr = new int [10];

Вот только оператора new в С нет и не было. Он тоже принадлежит С++.

Да, привычка.
Если точнее то в С: int* arr = calloc(10, sizeof(int)); free(arr);
...
Рейтинг: 0 / 0
Размер динамического массива
    #38133003
Вопрос поинтересней, как узнать размер памяти выдеренный/зарезервированный под std::map/set?
Перемножить кол-во элементов на их размер видимо не подойдет.
...
Рейтинг: 0 / 0
Размер динамического массива
    #38133136
Фотография tehKosh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Вопрос поинтересней, как узнать размер памяти выдеренный/зарезервированный под std::map/set?
> Перемножить кол-во элементов на их размер видимо не подойдет.
custom allocator..
...
Рейтинг: 0 / 0
Размер динамического массива
    #38133154
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос поинтересней, мне уже твой адрес примелькался :)

Ты интересные темы поднимаешь. Залогонился-б. Так ведь и общаться
удобнее. Зачем носить маску Гая Фокса когда можно открыто
дискутировать?
...
Рейтинг: 0 / 0
Размер динамического массива
    #38133168
maytonВопрос поинтересней, мне уже твой адрес примелькался :)

Ты интересные темы поднимаешь. Залогонился-б. Так ведь и общаться
удобнее. Зачем носить маску Гая Фокса когда можно открыто
дискутировать?
Да уж куда открытей, если ник из слов моего поста и интересную тему поднимаю - это я :) Да и потом че все с никами - надо разнообразить.
Если серьезно, то так удобней обсуждать конкретную тему, а не то что где-то что-то до этого сказал.
...
Рейтинг: 0 / 0
Размер динамического массива
    #38142764
Пётр Седов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 lnix:

lnixВот конкретный простой пример.
Код: plaintext
\r\nint* pintarr = new int [10];\r\n
\r\nlnixСразу вопрос в догонку, как в VC посмотреть содержимое динамического массива?
В Visual Studio, в режиме отладки, жмём Shift + F9 (показать quick watch), вводим:
Код: plaintext
pintarr, 10

lnixНеужели никто из профи не может ответить на такой простой вопрос....
Как "Сыроежку" забанили, так и не осталось здесь профи...

lnixПо началу я был восхищен языком С++ после Паскаля...
Но как оказалось прикладные задачи ВЫГОДНЕЕ решать на нем...
Там нет таких проблем вообще.
В виртовском Pascal-е 70-ых годов не было динамических массивов произвольной длины. Длина каждого массива -- константа, известная во время компиляции. Если же речь о Delphi (скорее всего), то да, там есть удобные динамические массивы, и их аналог в C++ -- это std::vector, который вам настоятельно рекомендуют.

2 MasterZiv:
MasterZiv
Код: plaintext
\r\nvoid print_memory_block( void* mem, size_t size )\r\n{\r\n  printf( "memory block at %p of size %lu:", mem, size );\r\n
\r\n
Я бы не стал выводить size_t через %lu, ожидающий unsigned long. Потому что, на 64-битных платформах, size_t -- 64-битный, а unsigned long -- обычно 32-битный. Вроде как начиная с C99 можно выводить size_t через %zu, но printf из msvcrt.dll так не умеет.

2 Abstraction:
AbstractionПо аналогичной причине в Studio, насколько мне известно, нет удобного способа увидеть все элементы динамического массива в отладчике так же, как показываются элементы массива статического.
Способ есть, см. выше, только надо явно указать длину массива.

2 Sheraton:
SheratonЯ уже забыл когда я последний раз использовал массивы из С, я думал, что их сейчас уже никто и не использует
Вполне используют. Потому что STL-контейнеры не всегда подходят.

2 гость со странным nick-ом:
Поменьше глупостиА создается он так: int* arr = new int [10]; и в конце обязательно нужно удалять: delete arr[];
Точнее, так: «delete[] arr;».
...
Рейтинг: 0 / 0
Размер динамического массива
    #38142790
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос поинтереснейДа уж куда открытей, если ник из слов моего поста и интересную тему поднимаю - это я :) Да и потом че все с никами - надо разнообразить.
Если серьезно, то так удобней обсуждать конкретную тему, а не то что где-то что-то до этого сказал.
Раз уж модераторы подняли эту тему, то и я выскажусь.
Если серьезно, то ничего удобного в этом нет. Вас уже как минимум двое таких и непонятно кому отвечаешь.
О чем идет речь всегда видно по квотингу, а если вы хотите акцентировать на чем то, то прямо в тексте поста и укажите, не зачем использовать не предназначенные для этого поля.
Лично меня такой стиль раздражает, даже игнорирую иногда такие сообщения.
Так шо к вам просьба указывать какой-нибудь постоянный ник.
...
Рейтинг: 0 / 0
Размер динамического массива
    #38143344
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извините, а что интересного в данном топике ?
То, что неофит никак не может понять, что НЕЛЬЗЯ узнать размер динамического массива, а надо САМОМУ его хранить, тот, что выделял ?
И кто ему ВНЯТНЕЕ это в мозг вдолбит ?

Что тут интересного ?

Интересных тем в SQL.ru уже давно нет.
...
Рейтинг: 0 / 0
Размер динамического массива
    #38143504
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На всякий случай дополню. Сабж - неинтересен. Но анонимос пишет интересно.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Размер динамического массива
    #39435468
HappyGoodMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
lnix, Я где -то читал что размер помещается именно перед началом массива и в Visual Studio размер массива (хотя может это размер выделенной памяти ). Посмотрел память перед массивом и оказалось (на моем компе VS 2015), что размер находится на 12-ом байте перед началом массива .

int* a = new int[5]{1,2,3,4,5};

unsigned char *p = (unsigned char *)a;
cout << * ((int*)(p-12)) << ' ' << endl; выдаст корректное значение 20

p.s. Но это в визуал студии 2015, в других компиляторах размер может быть совсем в другом месте.
...
Рейтинг: 0 / 0
Размер динамического массива
    #39435472
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HappyGoodManПосмотрел память перед массивом и оказалось (на моем компе VS 2015), что размер находится на 12-ом байте перед началом массива .
...

p.s. Но это в визуал студии 2015, в других компиляторах размер может быть совсем в другом месте.
Замечательный способ отстрелить себе ноги.
Не надо пытаться читать ту память, которую не выделял. Завтра MS что-нибудь поменяет и перед твоим массивом вообще реальной памяти не окажется, вылетишь с исключением. Причем перестанет работать прога, которая стабильно работала годами и не менялась.
...
Рейтинг: 0 / 0
Размер динамического массива
    #39435483
HappyGoodMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,
авторЗамечательный способ отстрелить себе ноги.
Не надо пытаться читать ту память, которую не выделял. Завтра MS что-нибудь поменяет и перед твоим массивом вообще реальной памяти не окажется, вылетишь с исключением.

кажется я в постскриптуме написал, что это только в компиляторе vs 2015
...
Рейтинг: 0 / 0
Размер динамического массива
    #39435500
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HappyGoodManкажется я в постскриптуме написал, что это только в компиляторе vs 2015
Это может произойти даже в EXE откомпилированном в vs 2015

PS Зачем такое вообще писать? Стреляй себе в ноги, но зачем других этому учить?
...
Рейтинг: 0 / 0
Размер динамического массива
    #39435505
HappyGoodMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,
авторЗачем такое вообще писать? Стреляй себе в ноги, но зачем других этому учить?
Это ответ по сабжу, причем это работает, да ужасно ограниченно, но работает. И чтобы знать как не надо делать, как пример вполне пойдет
...
Рейтинг: 0 / 0
Размер динамического массива
    #39435575
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HappyGoodManp.s. Но это в визуал студии 2015, в других компиляторах размер может быть совсем в другом месте.По-моему, оно там ещё в VC6.0, но это было давно, и мне кажется, что это было -8
Dima TPS Зачем такое вообще писать? Стреляй себе в ноги, но зачем других этому учить?Да, есть функция _msize, которая сама знает, где брать размер смещения, и всегда правильно считает размер :)
...
Рейтинг: 0 / 0
Размер динамического массива
    #39435748
HappyGoodMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
CEMb,
авторДа, есть функция _msize, которая сама знает, где брать размер смещения, и всегда правильно считает размер :)
В msdn написано, что она заточена только под calloc, malloc, или realloc, а насчёт new ничего не сказано, но я проверил вроде работает и для памяти выделенной с помощью new.
...
Рейтинг: 0 / 0
Размер динамического массива
    #39435760
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HappyGoodManВ msdn написано, что она заточена только под calloc, malloc, или realloc, а насчёт new ничего не сказано, но я проверил вроде работает и для памяти выделенной с помощью new.Потому что new по умолчанию выделяет память с помощью malloc(из msvcrt*.dll, void* operator new...), потом зовёт конструктор. Но так может быть не всегда.
...
Рейтинг: 0 / 0
Размер динамического массива
    #39436091
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
переопределите new - а там посмотрим
...
Рейтинг: 0 / 0
Размер динамического массива
    #39436129
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилпереопределите new - а там посмотрим
Переопределять не обязательно, можно проще поломать
Код: plaintext
1.
2.
int a[] = {1,2,3,4,5};
f(a);
...
Рейтинг: 0 / 0
Размер динамического массива
    #39436232
Common Lisp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TЗамечательный способ отстрелить себе ноги.Ты любой реверс-инжениринг называешь "отстрелить себе ноги"?
...
Рейтинг: 0 / 0
25 сообщений из 51, страница 2 из 3
Форумы / C++ [игнор отключен] [закрыт для гостей] / Размер динамического массива
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]