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

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

у меня приходит объект new int[10] с неизвестной размерностью
...
Рейтинг: 0 / 0
как определить размер массива
    #36492749
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
потому что p - это указатель 4 байта (x86), 8 байтов (x64)
--------------------------------------------------------------
o(O_O)o
...
Рейтинг: 0 / 0
как определить размер массива
    #36492753
akalend
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это понятно что указатель, а как вычислить размер массива???
...
Рейтинг: 0 / 0
как определить размер массива
    #36492763
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akalendэто понятно что указатель, а как вычислить размер массива???
в данном случае никак, если бы был malloc можно было бы применить memsize по указателю
...
Рейтинг: 0 / 0
как определить размер массива
    #36492766
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cerebrumakalendэто понятно что указатель, а как вычислить размер массива???
в данном случае никак, если бы был malloc можно было бы применить msize по указателю
...
Рейтинг: 0 / 0
как определить размер массива
    #36492803
akalend
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
жаль, а что делать?
...
Рейтинг: 0 / 0
как определить размер массива
    #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
как определить размер массива
    #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
как определить размер массива
    #36492828
akalend
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а как определить границу допустимого индекса?
или есть что-то более хитрое?
...
Рейтинг: 0 / 0
как определить размер массива
    #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
как определить размер массива
    #36492910
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akalendа как определить границу допустимого индекса?
или есть что-то более хитрое?
Никак. Если после new вы не оставили никаких следов о размере выделения массива. И собственно массивов в "плюсах" нету. Они существуют только в воображении разработчика. Иммитация работы с массивами это - адресная арифметика С++. При этом проверку на диапазон индекса разработчик должен делать вручную.
...
Рейтинг: 0 / 0
как определить размер массива
    #36493108
akalend
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychв деструкторе делаешь delete[] _buff; или как там называется внутренний буфер для массива у тебяя так и делаю
...
Рейтинг: 0 / 0
как определить размер массива
    #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
как определить размер массива
    #36493478
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton wrote:

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

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

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

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

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


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