powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Размер динамического массива
25 сообщений из 51, страница 1 из 3
Размер динамического массива
    #38131889
lnix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем доброго времени суток!
Я сам не Сишник, только пытаюсь переквалифицироваться, а потому столкнулся с проблемой, которая поставила меня в тупик:
определения размера динамического массива.
Поковырял Гугл, ничего толкового нет. Кто во что горазд
Может кто подскажет?
Вот конкретный простой пример.
Код: plaintext
1.
2.
int* pintarr = new int [10];
int cnt = sizeof(pintarr)/sizeof(pintarr[0]);


Никогда бы не подумал что споткнусь на таком.
Заранее благодарен.
...
Рейтинг: 0 / 0
Размер динамического массива
    #38131916
Abstraction
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lnix,

Если кратко - такого способа нет.
Используйте std::vector или таскайте в отдельной переменной размер массива.
...
Рейтинг: 0 / 0
Размер динамического массива
    #38131938
lnix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не, мне нужно именно размер динамического массива.
Вектор мне не нужен. В этом то вся и затыка.
У меня функция формирует массив структур, помещает в память и возвращает указатель.
А уже остальные над этими данными глумятся.
...
Рейтинг: 0 / 0
Размер динамического массива
    #38131968
lnix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сразу вопрос в догонку, как в VC посмотреть содержимое динамического массива?
...
Рейтинг: 0 / 0
Размер динамического массива
    #38131974
Abstraction
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lnix,

Либо пусть возвращает shared_ptr на вектор, либо размер массива в дополнение к массиву, сказано же. Пока не вижу проблемы ни с первым, ни со вторым.
...
Рейтинг: 0 / 0
Размер динамического массива
    #38131978
Abstraction
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lnixСразу вопрос в догонку, как в VC посмотреть содержимое динамического массива?Посмотреть выражение вида dynamicArray[17] - это тот способ, о котором известно мне.
...
Рейтинг: 0 / 0
Размер динамического массива
    #38131981
lnix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ладно, как определить размер динамического массива я разобрался.
Все просто:
Код: plaintext
1.
2.
3.
4.
#include <malloc.h>

int* pintarr = new int [10];
int cnt = _msize(pintarr)/sizeof(pintarr[0]);



А как посмотреть содержимое массива?
Вот затыка то...
...
Рейтинг: 0 / 0
Размер динамического массива
    #38132027
lnix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неужели никто из профи не может ответить на такой простой вопрос....
...
Рейтинг: 0 / 0
Размер динамического массива
    #38132043
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lnixЛадно, как определить размер динамического массива я разобрался.
Все просто:
Код: plaintext
1.
2.
3.
4.
#include <malloc.h>

int* pintarr = new int [10];
int cnt = _msize(pintarr)/sizeof(pintarr[0]);



А как посмотреть содержимое массива?
Вот затыка то...

Вам же уже сказали, нет способа определить размер динамического массива.

MSDN
size_t _msize(
void *memblock
);

Returns the size of a memory block allocated in the heap.

Remarks

The _msize function returns the size, in bytes, of the memory block allocated by a call to calloc, malloc, or realloc.

...


Он возвращает размер выделенного блока памяти, где находится динамический массив, а не размер памяти самого массива.
Они могут отличаться.
Ну и функция непереносима, естественно.
Впрочем, возможно для ваших целей это подойдёт.

Посмотреть содержимое можно легко -- преобразовать адрес в (unsigned char *) и распечатать побайтно блок нужного размера.
То же самое можно сделать в отладчике.
...
Рейтинг: 0 / 0
Размер динамического массива
    #38132053
lnix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да...
а у меня все замечательно работает и правильно определяется....
наверно у меня кривой Вижуал Студио...
...
Рейтинг: 0 / 0
Размер динамического массива
    #38132059
lnix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, если мне не изменяет память и емкость всего блока разделить на емкость одного элемента блока то получим размер массива...
Пойду посмотрю школьные учебники, вдруг я ошибаюсь
...
Рейтинг: 0 / 0
Размер динамического массива
    #38132066
lnix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
опять же когда пишем
Код: plaintext
1.
delete [] array


то удаляем весь массив, емкость которого где-то хранится...
значит ее можно узнать и теоретически и практически....
...
Рейтинг: 0 / 0
Размер динамического массива
    #38132085
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lnixто удаляем весь массив
Удаляем не массив, удаляем выделенный кусок памяти. Он может быть больше массива из-за
округления до блока.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Размер динамического массива
    #38132095
lnix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обычный вопрос обнажил проблему элементарного незнания "бывалых" сишников в вопросах динмических массивов и бодание на предмет кто круче и нахрена вам это нужно.

СПАСИБО НЕ НАДО!!!

Я ХОЧУ РЕШИТЬ СВОИ ПРОБЛЕМЫ....

БОДАЙТЕСЬ С ДРУГИМИ.
...
Рейтинг: 0 / 0
Размер динамического массива
    #38132100
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
                                                                                                                                                                        
#include <stdlib.h>
#include <stdio.h>
#include <time.h>

void print_memory_block( void* mem, size_t size )
{
  printf( "memory block at %p of size %lu:", mem, size );
  for( unsigned i = 0; i < size; ++i )
    {
      if( !(i%10) )
        printf( "\n" );
      printf( "%2.2X ", ((unsigned char*)mem)[i] );
    }
  printf( "\nend of memory block\n", mem, size );
}

int main()
{
  int *m = new int[256];
  srand( (unsigned)time( NULL ) );
  for( unsigned i = 0; i < 256; ++i )
    m[i] = rand();
  print_memory_block( m, 256* sizeof(int) );
  return 0;
}
...
Рейтинг: 0 / 0
Размер динамического массива
    #38132113
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lnixКстати, если мне не изменяет память и емкость всего блока разделить на емкость одного элемента блока то получим размер массива...
Пойду посмотрю школьные учебники, вдруг я ошибаюсь

Блок может быть большего размера, чем нужно для массива.

Потом, ты исходишь чисто из своих практических соображений, а мы тут говорим о проблемах с точки зрения языка.
В C/С++ таких средств нет.
VC традиционно всегда хранил размер буфера (как и многие другие компиляторы)
и ему даже можно было путать delete и delete [].

Работает у тебя в твоём коде msize -- ну, славно.
...
Рейтинг: 0 / 0
Размер динамического массива
    #38132122
Abstraction
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторзначит ее можно узнать и теоретически и практически.... Теоретически, как уже сказано, можно узнать размер выделенного блока . Практически в стандарте средств для этого не оговорено, так что даже для этого способ может существовать только для какого-то конкретного компилятора и конкретной версии runtime (при том, что Вы их в первом посте не назвали, Ваши претензии выглядят достаточно странно). То есть, язык C++ как таковой "настаивает" на том, что Вам не следует выяснять размер массива таким образом. Если у Вас это вызывает только приступы смеха - дело Ваше.

По аналогичной причине в Studio, насколько мне известно, нет удобного способа увидеть все элементы динамического массива в отладчике так же, как показываются элементы массива статического. Один способ, не слишком удобный, но практически обычно удовлетворительный, мной уже был приведён: потребовать вычислить выражение array[i] или array[2] или что ещё нужно.
...
Рейтинг: 0 / 0
Размер динамического массива
    #38132156
lnix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос исчерпан.
По началу я был восхищен языком С++ после Паскаля...
Но как оказалось прикладные задачи ВЫГОДНЕЕ решать на нем...
Там нет таких проблем вообще.
Но проблема у меня именно в том что НЕОБХОДИМО реализовать алгоритм на VC.
Хотя должен сказать С++ начал мне нравиться больше Паскаля... как ни странно.
...
Рейтинг: 0 / 0
Размер динамического массива
    #38132307
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lnixДа...
а у меня все замечательно работает и правильно определяется....
наверно у меня кривой Вижуал Студио...
Есть популярная шутка про поломанные часы которые дважды в сутки
могут внезапно (!) показать правильное время.
...
Рейтинг: 0 / 0
Размер динамического массива
    #38132488
Sheraton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lnixВопрос исчерпан.
По началу я был восхищен языком С++ после Паскаля...
Но как оказалось прикладные задачи ВЫГОДНЕЕ решать на нем...
Там нет таких проблем вообще.
Но проблема у меня именно в том что НЕОБХОДИМО реализовать алгоритм на VC.
Хотя должен сказать С++ начал мне нравиться больше Паскаля... как ни странно.

Гыыыыы а при чем тут С++? Тот массив который вы используете это С а не С++. В С++ есть vector. Создатель С++ Бьярн Страуструп рекомендует пользоваться векторами. Смысл С++ в том, что бы на нам было легче программировать чем на С, а вы в своем коде отказываетесь от С++ а затем сокрушаетесь о том, что С++ хуже паскаля ))))) Прямо смешно читать )))) Я уже забыл когда я последний раз использовал массивы из С, я думал, что их сейчас уже никто и не использует и тут вдруг обнаруживается, что их не только использует, но еще и судят по ним о достоинствах и недостатках С++ )

"Наш век беспокойства в значительной мере является результатом попыток выполнить сегодняшнюю работу вчерашними средствами..." - Маршал Мак-Люган
...
Рейтинг: 0 / 0
Размер динамического массива
    #38132496
Sheraton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lnix, если вы хотите создавать программы на С++, то изучайте и используйте С++ а не С.
...
Рейтинг: 0 / 0
Размер динамического массива
    #38132512
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lnixВсем доброго времени суток!
Я сам не Сишник, только пытаюсь переквалифицироваться, а потому столкнулся с проблемой, которая поставила меня в тупик:
определения размера динамического массива.
Поковырял Гугл, ничего толкового нет. Кто во что горазд
Может кто подскажет?
Вот конкретный простой пример.
Код: plaintext
1.
2.
int* pintarr = new int [10];
int cnt = sizeof(pintarr)/sizeof(pintarr[0]);


Никогда бы не подумал что споткнусь на таком.
Заранее благодарен.

А тебе интересно, почему людям пишущим прикладной код на С++ даже в готову не приходит решать такие задачи? Ответ очевиден: они используют уже стандарные или самописные контейнеры, которые как раз таки призваны снять с плеч прикладного программиста подобного рода задачи:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
std::vector<int> arr;
// читаем из стандартного потока ввода в динамический массив
std::copy((std::istream_iterator<int>(std::cin)), std::istream_iterator<int>(), std::back_inserter(arr));
// выводим в  стандартный поток вывода
std::copy(arr.begin(), arr.end(), std::ostream_iterator<int>(std::cout));
// печатаем размер массива
std::cout << arr.size() << std::endl;



А то что ты называешь "динамическим" массивом, является им лишь в той мере, что он выделяется в хипе, но не может похвастать тем, что может подстраивать свою емкость под нужды клиента.
...
Рейтинг: 0 / 0
Размер динамического массива
    #38132584
lnix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я уже говорил, бодаться ни с кем не собираюсь потому как другие более важные дела есть.
...
Рейтинг: 0 / 0
Размер динамического массива
    #38132612
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lnixЯ уже говорил, бодаться ни с кем не собираюсь потому как другие более важные дела есть.

Просто может статься так, что ты микроскоп для забивания гвоздей используешь, поэтому, наверное, будет правильно задавать другого рода вопросы: а как лучше? а как правильно?
...
Рейтинг: 0 / 0
Размер динамического массива
    #38132622
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий Широков, будьте терпимее. Аудитория здесь - самая различная.
...
Рейтинг: 0 / 0
25 сообщений из 51, страница 1 из 3
Форумы / C++ [игнор отключен] [закрыт для гостей] / Размер динамического массива
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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