| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > Глобальный динамический массив |
| Автор: Snegovik86 18.8.2010, 11:53 | ||
| Всем доброго времени суток! Я более менее знаю язык VB, тк его преподавали в универе, сейчас по роду деятельности(разработчик софта и железа основанного на MK) занялся изучением С++. Столкнулся с проблемой, разработав алгоритм решающий, поставленную задачу, убедившись в его исправности и выгодности отладил его на VB используя глобально объявленные переменные и массивы(алгоритм подразумевает работу с одними и теме же динамическими массивами из разных процедур), которые подразумевалось в С++ затолкать в одну структуру. Но столкнулся с тем что как писать глобально такую структуру и вызывать её в любой функции не представляю. При том что операторы malloc realloc и free мне известны, и я уже с ними работал. Подразумевалось следующая структура:
Вопрос 1) Возможно ли в структуре реализовать динамический массив? Вопрос 2) Проблема в мышлении VB и глобально объявленных массивах? И надо просто сделать глобальные переменные а по функции передавать указатель на массив. |
| Автор: Dem_max 18.8.2010, 12:34 | ||||||
в структуре можно хранить указатель на динамический массив.
Выделили по указателю память на 200 элементов типа int
Если переменные глобальные то передавать указатель не обязательно, если локальные то передавать указатели на массивы. |
| Автор: SVN74 18.8.2010, 17:30 | ||
Структуры в С++ почти как классы, только с меньшей защитой имеют конструкторы и деструкторы...
Может Вам лучше использовать классы? |
| Автор: Snegovik86 19.8.2010, 08:08 |
| Проблема в том что я с ними ещё не работал, и если признаться думал что классы это те же структуры... С одной точки зрения хочется поглубже узнать язык С++ и написать программу так как правильно с точки зрения языка, а с др. стороны так как проще и удобнее и быстрее. Затеял я работу с глобальными структурами только потому что хочу написать так что получше узнать С++... И как ещё более правильнее я не знаю. Поэтому и прошу помощи. |
| Автор: mes 19.8.2010, 09:46 |
нельзя ли пояснить ?! |
| Автор: SVN74 19.8.2010, 10:47 |
Это сугубо мое личное мнение. 1. Структура использует стек, а стек не такой уж и большой, учитывая что структуры могут только копироваться... 2. В отличие от классов структуры работают по прямому доступу к их типам, а классы через указатели... 3. По умолчанию структура в отличие от класса все типы держит открытыми, а это наталкивает на мысль... Классы используют кучу, не копируются, доступны только через указатели, по умолчанию все типы закрыты. На мой взгляд, - возможности защиты класса выше... |
| Автор: JackYF 19.8.2010, 21:25 | ||
Мне кажется, вы перепутали С++ с чем-то другим. |
| Автор: bsa 23.8.2010, 17:56 | ||
Snegovik86, в С++ динамический массив называется вектор. Для этого в стандартной библиотеке шаблонов существует соответствующий шаблон, который называется vector. Чтобы его использовать, нужно подключить заголовочный файл <vector>, а в том месте, где нужен динамический массив элементов TK написать std::vector<TK>:
|
| Автор: Snegovik86 30.8.2010, 09:26 |
| Спасибо большое! |
| Автор: Snegovik86 31.8.2010, 10:21 | ||
Боюсь что так вот
не получиться по причине того что я работаю не совсем с "чистым" С++, а с IAR C/C++ for Advanced RISC Machines Ltd’s для ARM® Cores, а именно для sam9261. Сделал вывод такой вывод т.к. при подключении <vector> выдаёт тьма ошибок при компиляции... |
| Автор: ИванМ 31.8.2010, 16:20 |
| Snegovik86, пользуйтесь значит другим компилятором. Потому что vector это неотъемлемая часть c++ и не поддерживать его стыдно. |
| Автор: djamshud 31.8.2010, 16:32 |
| Дело не в плохом компиляторе, а в том, что не везде уместо поддерживать полностью стандарт С++. То есть урезанный С++ - это не баг, а фича. Топикстартеру советую гуглить реализации вектора на си. Ну или написать самому. Добавлено через 24 секунды Самому можно написать даже с классами. |
| Автор: ИванМ 31.8.2010, 20:45 | ||
В таком случае неуместно его называть C++. Слишком громкое название. |
| Автор: djamshud 31.8.2010, 23:18 |
| Меня совершенно случайно посетила гениальная мысль. Странно, что у компилятора есть заголовочный файл вектор, а скомпилировать его он не может. Возможно запускается С-компилятор вместо С++? |
| Автор: bsa 1.9.2010, 01:07 | ||
Я тоже пишу ПО под этот проц. Использую для этого gcc. Настроил http://buildroot.uclibc.org/ и получаю удовольствие. |
| Автор: Snegovik86 10.9.2010, 08:40 | ||||||||||
Есть доля правды в такой мысле. Т.К. у нас всё таки не PC а всего навсего мироконтроллер, хотя и весьма навароченный, для его работы используется смесь двух языков. Поэтому компилятор так и называется
Интересно другое. Я сделал хранение указателя динамического массива в глобально объявленной структуре, и с уверенностью могу сказать что он действительно работает, но на сколько я понимаю если я объявляю два различных массива
то элементы этих массивов должны быть абсолютно развязаны между собой в памяти. А у меня при записи в элементы одного массива они пишутся и во второй в ячейку под тем же адресом... Вышел из положения созданием одного большого массива и сам слежу за распределением памяти...
Совершенно справедливое изречение Одно но! 1) раздувать периферию только для того что бы поставить Linux, как следствие увеличение стоимости изделия. 2) время ожидания загрузки ОС 15-20 секунд это очень много 3) всё то что может предоставить ОС Мне просто нужен высокопроизводительный камень для решения конкретных задач, поэтому я работаю непосредственно с С компилятором и контроллером.
Прошерстил форумы и сам собираюсь уходить с IAR на KEIL. Из этих трёх компиляторов самый компактный и выверенный машинный код получается у KEILa. Разница ощутима при одних и тех же программах. |
| Автор: icecrashldr 10.9.2010, 10:37 | ||
И компактно и быстро, особенно если стукруту надо будет сохранить , передать и все такое ... |