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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как определить длину массива ? ??? 
V
    Опции темы
Syberex
Дата 11.12.2006, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Необходимо определить длину массива как?

Код

char * First=new char[500];


как определить сколько элементов в массиве First ?

--------------------
whole power in artificial intelligences
PM MAIL ICQ   Вверх
TaNK
Дата 11.12.2006, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: нет
Всего: 1



http://forum.vingrad.ru/index.php?showtopi...st&p=955475
посмотри тут может что надо тебе.


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

Oracle 11.2.0.3.0
FireBird 1.0-2.5


PM MAIL ICQ   Вверх
Syberex
Дата 11.12.2006, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



это не то, необходимо определить не длину данных в массиве, а размерность массива, т.е сколько элементов было выделено оператором new.
--------------------
whole power in artificial intelligences
PM MAIL ICQ   Вверх
maxim1000
Дата 11.12.2006, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 17
Всего: 110



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

обычно, вместе с массивом хранят его размер (например, std::vector)


--------------------
qqq
PM WWW   Вверх
vinter
Дата 11.12.2006, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


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

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



ИМХО никак, да и зачем это нужно??
ты всегда до выделения знаешь, сколько надо выделить, так почему бы не использовать это знание в дальнейшем smile 


--------------------
Мой блог
PM MAIL WWW   Вверх
Dray
Дата 11.12.2006, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Материалист
**


Профиль
Группа: Участник
Сообщений: 652
Регистрация: 7.10.2003
Где: г. Всеволожск

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



Даже если пишут функции, работающие с массивами, то параметром передают размер.


--------------------
忍者

user posted image
PM MAIL   Вверх
Syberex
Дата 11.12.2006, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



ястно, спасибо
--------------------
whole power in artificial intelligences
PM MAIL ICQ   Вверх
Dov
Дата 11.12.2006, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Так попробуй
Код
#include <iostream.h>
#include <malloc.h>

int main(int argc, char *argv[]) 
{
    char * First = new char[500];
    cout << _msize(First) / sizeof(char) << endl;

    return 0;
}

хотя  _msize работает с malloc, realloc и т.п., но может быть и здесь сгодится.


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


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Dov, не думаю.
Даже если этот будет работать, то это нехорошо...
Легче всего запоминать размер перед выделением... самый распространенный способ.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Dov
Дата 11.12.2006, 23:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(JackYF @  11.12.2006,  16:21 Найти цитируемый пост)
Легче всего запоминать размер перед выделением...

JackYF, если это ты выделял память, то да, а если не ты, то как определить?
Например, где-то есть такая ф-ция:
Код
int* mas()
{
    int* ar = new int[5];
    ar[0]   = 3;

    return ar;
}

И эту ф-цию ты хочешь использовать у себя в программе, например так:
Код
int main(int argc, char *argv[])
{
    int* ptr = mas();
    int size = ? ;  // а здесь ты хочешь знать размер массива  
    cout << size << endl; // что же мы здесь увидим?

    delete[] ptr;    
    
    return 0;
}




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


Материалист
**


Профиль
Группа: Участник
Сообщений: 652
Регистрация: 7.10.2003
Где: г. Всеволожск

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



Код
int* mas()
{
    int* ar = new int[5];
    ar[0]   = 3;
    return ar;
}

Это плохая функция. Функции подобного рода тогда уж должны возвращать размер.


--------------------
忍者

user posted image
PM MAIL   Вверх
Dov
Дата 12.12.2006, 00:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Dray @  11.12.2006,  22:45 Найти цитируемый пост)
Это плохая функция. Функции подобного рода тогда уж должны возвращать размер.


Dray, разговор, ведь,  не об этом. К тому же это только пример, для наглядности. 


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


Материалист
**


Профиль
Группа: Участник
Сообщений: 652
Регистрация: 7.10.2003
Где: г. Всеволожск

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



Понимаю. Просто я хотел сказать что в хорошем коде не должен потребоваться способ определения размера массива. Так как этот размер всегда должен быть известен.


--------------------
忍者

user posted image
PM MAIL   Вверх
Dov
Дата 12.12.2006, 00:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Dray @  11.12.2006,  23:16 Найти цитируемый пост)
Понимаю. Просто я хотел сказать что в хорошем коде не должен потребоваться способ определения размера массива. Так как этот размер всегда должен быть известен.


Dray, тогда бы sizeof отменили бы.  smile 


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


Материалист
**


Профиль
Группа: Участник
Сообщений: 652
Регистрация: 7.10.2003
Где: г. Всеволожск

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



Dov, smile  smile  smile 
Правда тут уже другое. Это не всегда можно однозначно знать.


--------------------
忍者

user posted image
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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