Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / как определить размер массива / 25 сообщений из 50, страница 1 из 2
27.02.2010, 20:22
    #36492745
akalend
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как определить размер массива
Код: plaintext
1.
int * p = new int[ 10 ]
как определить какой размер у массива p ?

через sizeof(p )/sizeof(p[0] ) не получется

у меня приходит объект new int[10] с неизвестной размерностью
...
Рейтинг: 0 / 0
27.02.2010, 20:25
    #36492749
Cerebrum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как определить размер массива
потому что p - это указатель 4 байта (x86), 8 байтов (x64)
--------------------------------------------------------------
o(O_O)o
...
Рейтинг: 0 / 0
27.02.2010, 20:32
    #36492753
akalend
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как определить размер массива
это понятно что указатель, а как вычислить размер массива???
...
Рейтинг: 0 / 0
27.02.2010, 20:41
    #36492763
Cerebrum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как определить размер массива
akalendэто понятно что указатель, а как вычислить размер массива???
в данном случае никак, если бы был malloc можно было бы применить memsize по указателю
...
Рейтинг: 0 / 0
27.02.2010, 20:44
    #36492766
Cerebrum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как определить размер массива
Cerebrumakalendэто понятно что указатель, а как вычислить размер массива???
в данном случае никак, если бы был malloc можно было бы применить msize по указателю
...
Рейтинг: 0 / 0
27.02.2010, 21:31
    #36492803
akalend
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как определить размер массива
жаль, а что делать?
...
Рейтинг: 0 / 0
27.02.2010, 21:34
    #36492806
akalend
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как определить размер массива
у меня задача:

Написать шаблон умного указателя для массива ( auto _ ptr _ array).
Код: plaintext
1.
2.
3.
4.
5.
    auto_ptr_array< int > arr( new int[  10  ] );  
    // есть операции для доступа по индексу 
    arr[  1  ] =  4 ; 
    int t = arr[  0  ]; 
// при выходе за scope массив удалается
как определить выходе за scope?
...
Рейтинг: 0 / 0
27.02.2010, 21:38
    #36492811
egorych
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как определить размер массива
akalendу меня задача:

Написать шаблон умного указателя для массива ( auto _ ptr _ array).
Код: plaintext
1.
2.
3.
4.
5.
    auto_ptr_array< int > arr( new int[  10  ] );  
    // есть операции для доступа по индексу 
    arr[  1  ] =  4 ; 
    int t = arr[  0  ]; 
// при выходе за scope массив удалается
как определить выходе за scope?а зачем знать размерность массива при выходе за scope?
...
Рейтинг: 0 / 0
27.02.2010, 21:54
    #36492828
akalend
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как определить размер массива
а как определить границу допустимого индекса?
или есть что-то более хитрое?
...
Рейтинг: 0 / 0
27.02.2010, 22:22
    #36492845
egorych
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как определить размер массива
akalendа как определить границу допустимого индекса?
или есть что-то более хитрое?граница допустимого индекса и выход за scope - совсем разные вещи просто ))
выход из scope ( область видимости ), это:
Код: plaintext
1.
2.
3.
4.
{
   auto_ptr_array< int > arr( new int[  10  ] );  // создали массив
   arr[  0  ] =  4 ; // операция доступа по индексу
}  // вышли из scope, удалили массив
в деструкторе делаешь delete[] _buff; или как там называется внутренний буфер для массива у тебя
...
Рейтинг: 0 / 0
28.02.2010, 00:03
    #36492910
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как определить размер массива
akalendа как определить границу допустимого индекса?
или есть что-то более хитрое?
Никак. Если после new вы не оставили никаких следов о размере выделения массива. И собственно массивов в "плюсах" нету. Они существуют только в воображении разработчика. Иммитация работы с массивами это - адресная арифметика С++. При этом проверку на диапазон индекса разработчик должен делать вручную.
...
Рейтинг: 0 / 0
28.02.2010, 12:00
    #36493108
akalend
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как определить размер массива
egorychв деструкторе делаешь delete[] _buff; или как там называется внутренний буфер для массива у тебяя так и делаю
...
Рейтинг: 0 / 0
28.02.2010, 18:27
    #36493476
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как определить размер массива
akalend wrote:
> int * p = new int[*10*]
>
> как определить какой размер у массива p ?

Никак. Его надо знать. Ты его задаёшь, и знаешь
(10), вот и везде, где это надо, используй этот
размер.

> через sizeof(p )/sizeof(p[0] ) не получется

Правильно, потому что это не массив. Это указатель.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
28.02.2010, 18:29
    #36493478
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как определить размер массива
mayton wrote:

> воображении разработчика. Иммитация работы с массивами это - адресная
> арифметика С++. При этом проверку на диапазон индекса разработчик должен
> делать вручную.

Э... это ты уж загнул. Есть массивы, всё есть. А вот проверку индекса
вообще-то ни в каких языках не делают. везде руками.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
28.02.2010, 18:39
    #36493491
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как определить размер массива
Проблема index out of bounds существует с начала времён программирования. Только решается она везде по разному. Во многих языках операции индексатора искусственно ограничены. На сях насколько я помню, по умолчанию, не существует механизма определения вылета за границы. Это уж как бог даст. Особенно в режиме релиза.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
03.02.2015, 11:28
    #38870186
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как определить размер массива
maytonПроблема index out of bounds существует с начала времён программирования. Только решается она везде по разному. Во многих языках операции индексатора искусственно ограничены. На сях насколько я помню, по умолчанию, не существует механизма определения вылета за границы. Это уж как бог даст. Особенно в режиме релиза.

Только не "как бог даст", а как программист напишет.
...
Рейтинг: 0 / 0
03.02.2015, 12:52
    #38870293
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как определить размер массива
Ого. Вспомнили былое.
...
Рейтинг: 0 / 0
03.02.2015, 13:12
    #38870317
egorych
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как определить размер массива
maytonОго. Вспомнили былое.приступ некрофилии ))
...
Рейтинг: 0 / 0
03.02.2015, 21:52
    #38870825
NekZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как определить размер массива
Раз пошла некрофилия, то запостчу-ка я кусочек проприетарного кода, который у нас используется

Код: plaintext
1.
#define ArrayLen( a ) ( ( sizeof( a ) / sizeof( 0[ a ] ) ) / ( (size_t)( ! ( sizeof( a ) % sizeof( 0[ a ] ) ) ) ) )
...
Рейтинг: 0 / 0
04.02.2015, 06:14
    #38870921
SashaMercury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как определить размер массива
NekZ,
почему вы используете не всем понятную конструкцию 0[a] вместо a[0]? Мне она может быть нравится(и мне она понятна), но мне интересно почему вы так сделали.

А вот зачем знаменатель у вас мне не очень понятно. Нельзя обойтись без него ? В каких случаях ?
...
Рейтинг: 0 / 0
04.02.2015, 08:21
    #38870978
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как определить размер массива
SashaMercuryА вот зачем знаменатель у вас мне не очень понятно. Нельзя обойтись без него ? В каких случаях ?
Да-да, NekZ, расскажите в каких случаях размер массива не кратен размеру элемента
...
Рейтинг: 0 / 0
04.02.2015, 10:03
    #38871073
BagaBaga
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как определить размер массива
Раз подняли топик, то можно и
std::array
тиснуть для истории...
...
Рейтинг: 0 / 0
04.02.2015, 10:19
    #38871095
Barlone
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как определить размер массива
Anatoly MoskovskySashaMercuryА вот зачем знаменатель у вас мне не очень понятно. Нельзя обойтись без него ? В каких случаях ?
Да-да, NekZ, расскажите в каких случаях размер массива не кратен размеру элемента Может на случай ошибки: если вместо массива подставить указатель - оно иногда может обнаружить такую ошибку.
...
Рейтинг: 0 / 0
04.02.2015, 10:29
    #38871103
Barlone
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как определить размер массива
Хотя на случай ошибки в знаменатель лучше засунуть что-то типа
Код: plaintext
1.
(!((size_t)(a) ^ (size_t)(&(a))))
...
Рейтинг: 0 / 0
04.02.2015, 11:46
    #38871178
NekZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как определить размер массива
Мопед не мой, я лишь разместил объяву (С)
SashaMercuryNekZ,
почему вы используете не всем понятную конструкцию 0[a] вместо a[0]?
Чтобы туда не подставили любой объект, имеющий перегруженный operator[], а только лишь C-шный массив, для которого такой специфический синтаксис применим.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / как определить размер массива / 25 сообщений из 50, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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