Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Узнать размер динамического массива 
:(
    Опции темы
zim22
Дата 2.4.2009, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



кстати, правильно обнулить элементы так надо:
Код

memset(ar,0,sizeof(int) * size);    



--------------------
PM MAIL   Вверх
mes
Дата 2.4.2009, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(zim22 @  2.4.2009,  16:11 Найти цитируемый пост)
то обращение к элементу по индексу 0, которого не существует считает мусор... 

нельзя ли тут поподробней ? при чем тут мусор ? и вообще речь идет о sizeof(*array) или я чего то упустил ?

Добавлено через 1 минуту и 12 секунд
Цитата(zim22 @  2.4.2009,  16:21 Найти цитируемый пост)
кстати, правильно обнулить элементы так надо:

 а где соблюдение рекомендации от гугля ?


--------------------
PM MAIL WWW   Вверх
Soah
Дата 2.4.2009, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 512
Регистрация: 18.2.2009

Репутация: 6
Всего: 54



zim22
Код

long *ar;    
int size=100;
ar=new long[size];       
memset(ar,0,size);    
int size1=sizeof(ar[0])*size;
delete[] ar; 
cout << size1;


Код

long *ar;    
int size=100;
ar=new long[size];       
memset(ar,0,size);    
int size1=sizeof(&ar[0])*size;
delete[] ar; 
cout << size1;

посмотри что будет

Цитата(zim22 @  2.4.2009,  17:11 Найти цитируемый пост)
long size=0;

Цитата(Dmi3ev @  2.4.2009,  17:19 Найти цитируемый пост)
можно условие написать

PM MAIL   Вверх
zim22
Дата 2.4.2009, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(mes @  2.4.2009,  17:21 Найти цитируемый пост)
 а где соблюдение рекомендации от гугля ?

гугл меня простит.
Цитата(mes @  2.4.2009,  17:21 Найти цитируемый пост)
? и вообще речь идет о sizeof(*array) или я чего то упустил ?

sizeof(*array) или sizeof(array[0]) - разницы ведь нет? (я уже запутался окончательно %) )
это обращение к первому элементу массива. А если переменная мы пишем в коде int size=0;
то *array будет содержать мусор. smile 


--------------------
PM MAIL   Вверх
Soah
Дата 2.4.2009, 17:30 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 512
Регистрация: 18.2.2009

Репутация: 6
Всего: 54



Цитата(zim22 @  2.4.2009,  17:27 Найти цитируемый пост)
то *array будет содержать мусор.

нас интересует тип, а не значение
PM MAIL   Вверх
Anikmar
Дата 2.4.2009, 17:30 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 59



Цитата(zim22 @  2.4.2009,  17:27 Найти цитируемый пост)
sizeof(*array)

Никакого обращения к элементу здесь нет. Результат выражения считается при компиляции.
PM MAIL ICQ   Вверх
zim22
Дата 2.4.2009, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(Anikmar @  2.4.2009,  17:30 Найти цитируемый пост)
Никакого обращения к элементу здесь нет. Результат выражения считается при компиляции.

Я этого не знал. Всем спасибо за наставления smile


--------------------
PM MAIL   Вверх
mes
Дата 2.4.2009, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(zim22 @  2.4.2009,  16:27 Найти цитируемый пост)
sizeof(*array) или sizeof(array[0]) - разницы ведь нет? (я уже запутался окончательно %) )

 smile 
Цитата(Anikmar @  2.4.2009,  16:30 Найти цитируемый пост)
Никакого обращения к элементу здесь нет. Результат выражения считается при компиляции. 

 smile 


--------------------
PM MAIL WWW   Вверх
Dmi3ev
Дата 2.4.2009, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 13
Всего: 41



короче, я так понимаю, мы пришли к такому варианту, учитывая все наши обсуждения)))
Код

//...
long *ar;    
int size=100;
if (size<=0)
{
    cout<<"error: size must be >0";
    return -1;//если функция возвращает целое значение
}
ar=new long[size];           
int size1=sizeof(ar[0])*size;//мне кажется так все лучше...
memset(ar, 0, size1);//сначала посчитали размер, потом обнулили, потому как memset(ar,0,size) не очень правильно...
//...
delete[] ar;
cout << size1;
//...



--------------------

PM MAIL   Вверх
Alca
Дата 2.4.2009, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 2
Всего: 50



макрос ARRAYSIZE Есть

Добавлено через 14 секунд
 smile

Добавлено через 1 минуту
Код

int iSize = ARRAYSIZE(ArrayName);



--------------------
PM WWW ICQ Skype Jabber   Вверх
andrew_121
Дата 2.4.2009, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



Alca, Простите, Уважаемая, а можно взглянуть на расширенный текст сего макроса?


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
mes
Дата 2.4.2009, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(andrew_121 @  2.4.2009,  17:14 Найти цитируемый пост)
Alca, Простите, Уважаемая, 

Цитата(Profile of Alca)

Пол Мужской

smile

Цитата(Alca @  2.4.2009,  17:06 Найти цитируемый пост)
макрос ARRAYSIZE Есть

насколько я помню он для статических массивов и звучит примерно так  
Код

#define ARRAYSIZE(array) sizeof(array)/sizeof(*array)


Это сообщение отредактировал(а) mes - 2.4.2009, 18:20


--------------------
PM MAIL WWW   Вверх
andrew_121
Дата 2.4.2009, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



Цитата(mes @  2.4.2009,  18:17 Найти цитируемый пост)
Цитата(Profile of Alca)

Пол Мужской

smile

Глупо получилось smile  За то смешно... smile 


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
Dov
Дата 2.4.2009, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 11
Всего: 88



Цитата(Dmi3ev @  2.4.2009,  17:58 Найти цитируемый пост)
короче, я так понимаю, мы пришли к такому варианту, учитывая все наши обсуждения)))

Мне кажется, что все здесь запутались и не понимают, что имел ввиду ТС. Я думаю, что он имел ввиду следующее.
Допустим у него есть такой код:
Код

void func(int * mas)
{
    int size;    

    // здесь он хочет узнать размер массива, что бы работать с ним дальше
    size = /* ??? */ ;
    memset(mas, 0, size);    //Инициализация
    // ...
}

int main()
{
    int * ar;                  // указатель на элемент массива
    int   size;                // размер массива

    cout << "Ведите размер массива: ";
    cin  >> size;

    ar = new int[size];        //Выделение памяти

    // ...
    func(ar);
    // ...

    delete[] ar;               //Удаление

    return 0;
}

По-моему, что-то такое и хотел узнать ТС..   smile 





--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Soah
Дата 2.4.2009, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 512
Регистрация: 18.2.2009

Репутация: 6
Всего: 54



Dov, мы конечно немного отошли от темы, но ведь есть и решение
http://forum.vingrad.ru/index.php?showtopi...t&p=1831345
PM MAIL   Вверх
Страницы: (4) Все 1 2 [3] 4 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0930 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.