Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
как определить размер массива
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. через sizeof(p )/sizeof(p[0] ) не получется у меня приходит объект new int[10] с неизвестной размерностью ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2010, 20:22 |
|
||
|
как определить размер массива
|
|||
|---|---|---|---|
|
#18+
потому что p - это указатель 4 байта (x86), 8 байтов (x64) -------------------------------------------------------------- o(O_O)o ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2010, 20:25 |
|
||
|
как определить размер массива
|
|||
|---|---|---|---|
|
#18+
это понятно что указатель, а как вычислить размер массива??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2010, 20:32 |
|
||
|
как определить размер массива
|
|||
|---|---|---|---|
|
#18+
akalendэто понятно что указатель, а как вычислить размер массива??? в данном случае никак, если бы был malloc можно было бы применить memsize по указателю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2010, 20:41 |
|
||
|
как определить размер массива
|
|||
|---|---|---|---|
|
#18+
Cerebrumakalendэто понятно что указатель, а как вычислить размер массива??? в данном случае никак, если бы был malloc можно было бы применить msize по указателю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2010, 20:44 |
|
||
|
как определить размер массива
|
|||
|---|---|---|---|
|
#18+
жаль, а что делать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2010, 21:31 |
|
||
|
как определить размер массива
|
|||
|---|---|---|---|
|
#18+
у меня задача: Написать шаблон умного указателя для массива ( auto _ ptr _ array). Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2010, 21:34 |
|
||
|
как определить размер массива
|
|||
|---|---|---|---|
|
#18+
akalendу меня задача: Написать шаблон умного указателя для массива ( auto _ ptr _ array). Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2010, 21:38 |
|
||
|
как определить размер массива
|
|||
|---|---|---|---|
|
#18+
а как определить границу допустимого индекса? или есть что-то более хитрое? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2010, 21:54 |
|
||
|
как определить размер массива
|
|||
|---|---|---|---|
|
#18+
akalendа как определить границу допустимого индекса? или есть что-то более хитрое?граница допустимого индекса и выход за scope - совсем разные вещи просто )) выход из scope ( область видимости ), это: Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2010, 22:22 |
|
||
|
как определить размер массива
|
|||
|---|---|---|---|
|
#18+
akalendа как определить границу допустимого индекса? или есть что-то более хитрое? Никак. Если после new вы не оставили никаких следов о размере выделения массива. И собственно массивов в "плюсах" нету. Они существуют только в воображении разработчика. Иммитация работы с массивами это - адресная арифметика С++. При этом проверку на диапазон индекса разработчик должен делать вручную. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2010, 00:03 |
|
||
|
как определить размер массива
|
|||
|---|---|---|---|
|
#18+
egorychв деструкторе делаешь delete[] _buff; или как там называется внутренний буфер для массива у тебяя так и делаю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2010, 12:00 |
|
||
|
как определить размер массива
|
|||
|---|---|---|---|
|
#18+
akalend wrote: > int * p = new int[*10*] > > как определить какой размер у массива p ? Никак. Его надо знать. Ты его задаёшь, и знаешь (10), вот и везде, где это надо, используй этот размер. > через sizeof(p )/sizeof(p[0] ) не получется Правильно, потому что это не массив. Это указатель. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2010, 18:27 |
|
||
|
как определить размер массива
|
|||
|---|---|---|---|
|
#18+
mayton wrote: > воображении разработчика. Иммитация работы с массивами это - адресная > арифметика С++. При этом проверку на диапазон индекса разработчик должен > делать вручную. Э... это ты уж загнул. Есть массивы, всё есть. А вот проверку индекса вообще-то ни в каких языках не делают. везде руками. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2010, 18:29 |
|
||
|
как определить размер массива
|
|||
|---|---|---|---|
|
#18+
Проблема index out of bounds существует с начала времён программирования. Только решается она везде по разному. Во многих языках операции индексатора искусственно ограничены. На сях насколько я помню, по умолчанию, не существует механизма определения вылета за границы. Это уж как бог даст. Особенно в режиме релиза. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2010, 18:39 |
|
||
|
как определить размер массива
|
|||
|---|---|---|---|
|
#18+
maytonПроблема index out of bounds существует с начала времён программирования. Только решается она везде по разному. Во многих языках операции индексатора искусственно ограничены. На сях насколько я помню, по умолчанию, не существует механизма определения вылета за границы. Это уж как бог даст. Особенно в режиме релиза. Только не "как бог даст", а как программист напишет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2015, 11:28 |
|
||
|
как определить размер массива
|
|||
|---|---|---|---|
|
#18+
Ого. Вспомнили былое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2015, 12:52 |
|
||
|
как определить размер массива
|
|||
|---|---|---|---|
|
#18+
maytonОго. Вспомнили былое.приступ некрофилии )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2015, 13:12 |
|
||
|
как определить размер массива
|
|||
|---|---|---|---|
|
#18+
Раз пошла некрофилия, то запостчу-ка я кусочек проприетарного кода, который у нас используется Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2015, 21:52 |
|
||
|
как определить размер массива
|
|||
|---|---|---|---|
|
#18+
NekZ, почему вы используете не всем понятную конструкцию 0[a] вместо a[0]? Мне она может быть нравится(и мне она понятна), но мне интересно почему вы так сделали. А вот зачем знаменатель у вас мне не очень понятно. Нельзя обойтись без него ? В каких случаях ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2015, 06:14 |
|
||
|
как определить размер массива
|
|||
|---|---|---|---|
|
#18+
SashaMercuryА вот зачем знаменатель у вас мне не очень понятно. Нельзя обойтись без него ? В каких случаях ? Да-да, NekZ, расскажите в каких случаях размер массива не кратен размеру элемента ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2015, 08:21 |
|
||
|
как определить размер массива
|
|||
|---|---|---|---|
|
#18+
Раз подняли топик, то можно и std::array тиснуть для истории... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2015, 10:03 |
|
||
|
как определить размер массива
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskySashaMercuryА вот зачем знаменатель у вас мне не очень понятно. Нельзя обойтись без него ? В каких случаях ? Да-да, NekZ, расскажите в каких случаях размер массива не кратен размеру элемента Может на случай ошибки: если вместо массива подставить указатель - оно иногда может обнаружить такую ошибку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2015, 10:19 |
|
||
|
как определить размер массива
|
|||
|---|---|---|---|
|
#18+
Хотя на случай ошибки в знаменатель лучше засунуть что-то типа Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2015, 10:29 |
|
||
|
как определить размер массива
|
|||
|---|---|---|---|
|
#18+
Мопед не мой, я лишь разместил объяву (С) SashaMercuryNekZ, почему вы используете не всем понятную конструкцию 0[a] вместо a[0]? Чтобы туда не подставили любой объект, имеющий перегруженный operator[], а только лишь C-шный массив, для которого такой специфический синтаксис применим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2015, 11:46 |
|
||
|
как определить размер массива
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskySashaMercuryА вот зачем знаменатель у вас мне не очень понятно. Нельзя обойтись без него ? В каких случаях ? Да-да, NekZ, расскажите в каких случаях размер массива не кратен размеру элемента Наверное, в случае с указателями ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2015, 11:54 |
|
||
|
как определить размер массива
|
|||
|---|---|---|---|
|
#18+
NekZНаверное, в случае с указателями Ну, да, наверное, но, как выше заметили, лишь иногда )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2015, 12:01 |
|
||
|
как определить размер массива
|
|||
|---|---|---|---|
|
#18+
NekZМопед не мой, я лишь разместил объяву (С) SashaMercuryNekZ, почему вы используете не всем понятную конструкцию 0[a] вместо a[0]? Чтобы туда не подставили любой объект, имеющий перегруженный operator[], а только лишь C-шный массив, для которого такой специфический синтаксис применим. И что будет если подставить туда перегруженный оператор в первом и втором случае ?В вашем варианте не отработает ? А в классическом варианте нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2015, 02:14 |
|
||
|
как определить размер массива
|
|||
|---|---|---|---|
|
#18+
NekZ, вы извините, это видимо тривиальный вопрос, и все остальные понимают в чём тут дело. Но я не понял до сих пор, что хорошего в том, что мы получаем порой деление на 0. Не нравится что оператор sizeof используется 4 раза, и из них 2 дублируются. Маловероятно что происходит какая-то буферизация таких операций. Или неправ ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2015, 02:24 |
|
||
|
как определить размер массива
|
|||
|---|---|---|---|
|
#18+
SashaMercuryНо я не понял до сих пор, что хорошего в том, что мы получаем порой деление на 0. Хорошо то что ошибка возникнет там где она сделана. Иначе могут начаться "мистические" явления совсем в другом коде, в таких случаях искать причину намного сложнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2015, 07:58 |
|
||
|
как определить размер массива
|
|||
|---|---|---|---|
|
#18+
Дмитрий, неужели правильно использовать такой грязный способ для обнаружения ошибки? Причём такой способ будет выявлять лишь частные случаи(как уже сказано выше). А есть ли смысл ловить эти частные случаи вообще ? Думаю нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2015, 08:03 |
|
||
|
как определить размер массива
|
|||
|---|---|---|---|
|
#18+
SashaMercuryДмитрий, неужели правильно использовать такой грязный способ для обнаружения ошибки? Причём такой способ будет выявлять лишь частные случаи(как уже сказано выше). А есть ли смысл ловить эти частные случаи вообще ? Думаю нет Это лучше чем ничего. Как выше уже написали - нет нормальных способов, поэтому каждый выкручивается по своему, максимально минимизируя ущербность своей реализации. Частные ошибки есть смысл ловить, если они достаточно часто встречаются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2015, 08:57 |
|
||
|
как определить размер массива
|
|||
|---|---|---|---|
|
#18+
SashaMercuryНе нравится что оператор sizeof используется 4 раза, и из них 2 дублируются. Маловероятно что происходит какая-то буферизация таких операций. Или неправ ? sizeof во время компиляции превращается в константу, т.е. в итоге будет выражение из одних констант. Компилятор его посчитает во время компиляции и реально в коде будет использоваться только результат расчета. Вот что отладчик показывает: Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2015, 09:17 |
|
||
|
как определить размер массива
|
|||
|---|---|---|---|
|
#18+
Dima TSashaMercuryНе нравится что оператор sizeof используется 4 раза, и из них 2 дублируются. Маловероятно что происходит какая-то буферизация таких операций. Или неправ ? sizeof во время компиляции превращается в константу, т.е. в итоге будет выражение из одних констант. Компилятор его посчитает во время компиляции и реально в коде будет использоваться только результат расчета. Вот что отладчик показывает: Код: plaintext 1. 2. 3. Спасибо. Это классическое поведение всех компиляторов С/С++ ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2015, 09:25 |
|
||
|
как определить размер массива
|
|||
|---|---|---|---|
|
#18+
SashaMercuryСпасибо. Это классическое поведение всех компиляторов С/С++ ? За все сказать не могу, но думаю что все, т.к. неэффективно вставлять в код расчет выражения из одних констант. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2015, 09:33 |
|
||
|
как определить размер массива
|
|||
|---|---|---|---|
|
#18+
SashaMercuryНе нравится что оператор sizeof используется 4 раза, и из них 2 дублируются. Маловероятно что происходит какая-то буферизация таких операций. Или неправ ?sizeof вычисляется на этапе компиляции, в этом его прелесть )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2015, 10:11 |
|
||
|
как определить размер массива
|
|||
|---|---|---|---|
|
#18+
Dima TКак выше уже написали - нет нормальных способов, поэтому каждый выкручивается по своему Поправка. Нет нормальных способов только в С, поэтому каждый С-шник выкручивается по своему, рассказывая почему он не хочет перейти на С++ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2015, 11:43 |
|
||
|
как определить размер массива
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyDima TКак выше уже написали - нет нормальных способов, поэтому каждый выкручивается по своему Поправка. Нет нормальных способов только в С, поэтому каждый С-шник выкручивается по своему, рассказывая почему он не хочет перейти на С++ А почему С-шник обязан переходить только на С++ ? У него есть другие варианты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2015, 12:58 |
|
||
|
как определить размер массива
|
|||
|---|---|---|---|
|
#18+
maytonА почему С-шник обязан переходить только на С++ ? У него есть другие варианты? А где было слово "обязан"? :) Перейти с С проще всего на С++. Можно даже первое время продолжать писать на С, но компилировать как С++, как это сделали разрабы GCC. У меня был опыт переписывания достаточно большого приложения с С на С++ со всеми современными фичами из Буста (смартуказатели, потоки, сеть). Так у меня в ходе такого постепенного рефакторинга код сокращался целыми полотнами. Куча багов просто исчезла сама по себе в результате перехода на С++. Причем до конца весь код не был переписан. В этом и плюс С++ - он экономит ресурсы разработчика. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2015, 17:00 |
|
||
|
как определить размер массива
|
|||
|---|---|---|---|
|
#18+
Переход был сопряжён с отладкой? Или "сразу" перешли и всё? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2015, 18:54 |
|
||
|
как определить размер массива
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyВ этом и плюс С++ - он экономит ресурсы разработчика. Я бы не согласился с этим утверждением. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2015, 19:52 |
|
||
|
как определить размер массива
|
|||
|---|---|---|---|
|
#18+
>> Куча багов просто исчезла сама по себе в результате перехода на С++. Эта фраза вообще интересна. Она заслуживает анализа. Интересно классифицировать эти баги и понять что исчезло и почему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2015, 20:01 |
|
||
|
как определить размер массива
|
|||
|---|---|---|---|
|
#18+
maytonПереход был сопряжён с отладкой? Или "сразу" перешли и всё? "Сразу" делался только небольшой допил, связанный с тем что в С++ из void* уже нельзя неявно переводить в конкретный тип, как в С. Ну и еще пару синтаксических мелочей. А рефакторинг с использованием фич С++ делался далеко не стразу, а постепенно малыми частями, помодульно, а в некоторых случаях только отдельными функциям. С промежуточными релизами. Поэтому большой отладки как таковой не было. А при переводе каждого модуля было просто написание теста к нему. Во многих случаях все работало с первой компиляции, т.к. алгоритм уже отлаженный, а код не писался заново, а обрезался )) NekZЯ бы не согласился с этим утверждением. Может вы просто недостаточно хорошо знаете С++? В этом случае действительно не экономит "- Леонид Ильич, идем к коммунизму, а есть нечего! - А в дороге кормить никто не обещал. " ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2015, 20:07 |
|
||
|
как определить размер массива
|
|||
|---|---|---|---|
|
#18+
mayton>> Куча багов просто исчезла сама по себе в результате перехода на С++. Эта фраза вообще интересна. Она заслуживает анализа. Интересно классифицировать эти баги и понять что исчезло и почему. Крэши и утечки памяти, которые не удавалось поймать, так как всегда находились более важные дела )). А стал использовать контейнеры и смартуказатели - и вуаля )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2015, 20:10 |
|
||
|
как определить размер массива
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyМожет вы просто недостаточно хорошо знаете С++? В этом случае действительно не экономит "- Леонид Ильич, идем к коммунизму, а есть нечего! - А в дороге кормить никто не обещал. " А кто же его хорошо знает-то, товарищ? А я тем временем пишу проектик на Rust -- отличная вещь! Производительность разработчика в разы выше, чем у опытного пользователя C++. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2015, 20:21 |
|
||
|
как определить размер массива
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyКрэши и утечки памяти, которые не удавалось поймать, так как всегда находились более важные дела )). А стал использовать контейнеры и смартуказатели - и вуаля )) Yep. А если ещё boost MPL туда завернуть для всяких там compile-time заклинаний, то вообще будет супер. IDE только сломается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2015, 20:24 |
|
||
|
как определить размер массива
|
|||
|---|---|---|---|
|
#18+
NekZА кто же его хорошо знает-то, товарищ? Я его знаю достаточно хорошо. NekZYep. А если ещё boost MPL туда завернуть для всяких там compile-time заклинаний, то вообще будет супер. IDE только сломается Будьте проще, и С++ вас полюбит. MPL вообще не предназначен для прикладных программ. Если вы не пишете библиотеки типа Буста (что уже характеризовало бы вас как маньяка), то вам такие слова даже знать не надо. Не удивительно что С++ вам кажется затратным. Забивать гвозди микроскопом это достаточно муторно )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2015, 20:49 |
|
||
|
как определить размер массива
|
|||
|---|---|---|---|
|
#18+
А С++ предназначен для прикладных? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2015, 23:30 |
|
||
|
как определить размер массива
|
|||
|---|---|---|---|
|
#18+
maytonА С++ предназначен для прикладных?вполне себе. Я вообще не понимаю, как они на других языках их пишут, а главное, зачем ;-)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2015, 00:39 |
|
||
|
|

start [/forum/topic.php?all=1&fid=57&tid=2019117]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
63ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
72ms |
get tp. blocked users: |
1ms |
| others: | 11ms |
| total: | 185ms |

| 0 / 0 |
