18.11.2018, 18:22 [+3 UTC]
в нашей команде: 3 117 чел. | участники онлайн: 18 (рекорд: 19)

:: РЕГИСТРАЦИЯ

:: задать вопрос

:: все разделы

:: правила

:: новости

:: участники

:: доска почёта

:: форум

:: блоги

:: поиск

:: статистика

:: наш журнал

:: наши встречи

:: наша галерея

:: отзывы о нас

:: поддержка

:: руководство

Версия системы:
7.55 (06.11.2018)

Общие новости:
24.09.2018, 16:49

Форум:
08.11.2018, 13:36

Последний вопрос:
18.11.2018, 18:06

Последний ответ:
18.11.2018, 17:58

Последняя рассылка:
18.11.2018, 17:15

Писем в очереди:
0

Мы в соцсетях:

Наша кнопка:

RFpro.ru - здесь вам помогут!

Отзывы о нас:
11.11.2009, 11:38 »
Arkadiy
Спасибо! Прибор хороший, и я сам готов оплатить за его ремонт, но и в этом мне отказали. [вопрос № 174132, ответ № 256381]
06.11.2009, 14:02 »
MrSpencer
Спасибо большое за решение задачи! [вопрос № 174011, ответ № 256231]

РАЗДЕЛ • С / С++

Создание программ на языках C и C++.

[администратор рассылки: Андрей Кузнецов aka Dr_Andrew (Старший модератор)]

Лучшие эксперты в этом разделе

solowey
Статус: Студент
Рейтинг: 124
Лысков Игорь Витальевич
Статус: Старший модератор
Рейтинг: 121
CradleA
Статус: Профессор
Рейтинг: 41

Перейти к консультации №:
 

Консультация онлайн # 67576
Раздел: • С / С++
Автор вопроса: Александр Трет
Отправлена: 18.12.2006, 20:15
Поступило ответов: 4

Добрый день, сам я новичек в С++, и сразу возникли вопросы:
int i [180] [180] [7]: - проходит
int i [180] [180] [8]: - Stack Overflow

два раза по int i [180] [180] [5]: - Stack Overflow
Есть ли возможность использовать всю или хотя-бы половину моей памяти в начальных декларациях?

и второе можно ли в функции rand() получить диапазон от 0 до 256?
С глубоким уважением Александр Трет.

Состояние: Консультация закрыта

Ответ # 132331 от Bob Johnson

Здравствуйте, Александр Трет!
во-первых, не стоит использовать стек для выделения памяти таких объемов. всегда есть GlobalAlloc, VirtualAlloc или то же new.
ну если уж надо, то вопрос такой - чем ты компилируешь программу? если это VC, то в свойствах проекта есть параметр, задающий размер стека (Linker - System - "Stack reserve size"). Впиши туда сколько надо и вперед. Если другой компилятор, скорее всего у него есть аналогичный параметр.


Консультировал: Bob Johnson
Дата отправки: 18.12.2006, 20:50

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Ответ # 132360 от Шинтяков Дмитрий Васильевич /

Здравствуйте, Александр Трет!

Когда вы пишете

int i [180] [180] [7]

, то память под переменную выделяется в стеке. Объём стека ограничен, так как он, в общем-то, не предназначен дял хранения большого объёма данных.
Изменить объём стека можно где-то в настройках компилятора.

В любом случае, это не выход. Выход - выделять память под даннsе из кучи, а не из стека (т.е. при помощи оператора new). Но придётся следить за тем, чтобы не забыть освободить выделенную память.

А ЕЩЁ ЛУЧШЕ, раз уж вы пишете на С++, а не на С, использовать стандартную библиотеку шаблонов stl. Это защитит от утечек памяти.
Например, так:

#include <vector>

using namespace std;
....

vector<vector<vector<int> > > i; //тут надо поаккуратнее с пробелами! их удалять нельзя.
i.resize(180);
for (int j=0;j<i.size();++j){
i[j].resize(180);
for (int k=0;k<i[j].size();++k){
i[j][k].resize(7);
}
}
....

не лучший код, но идея понятна, надеюсь. Забыл я, честно говоря, можно ли у vector задачать начальный объём... Давно на с++ не пишу, если честно ^_^


Консультировал: Шинтяков Дмитрий Васильевич /
Дата отправки: 19.12.2006, 01:37

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Ответ # 132373 от ADSota

Здравствуйте, Александр Трет!

1. Если компилятор для DOS, то нужно сделать 2 вещи:
а) Настроить компилятор - сделать модель памяти huge (для Borland C это будет меню "Options"-"Compiler"-"Code generation"-"Model"-"Huge"). Это даст возможность использования больших массивов (без этого массивы будут иметь максимум размера 1Мб).
б) Обозначить свой массивы как большие и статические:
static int huge i[180][180][20];
Используя обе эти вещи вы спокойно можете работать с этим массивом. (Только если используете ссылки на этот массив - лучше используйте дальние - это на будущее).


Консультировал: ADSota
Дата отправки: 19.12.2006, 08:29

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Ответ # 132622 от Sergijj

Здравствуйте, Александр Трет!

В ответах экспертов был незаслуженно забыт rand()...:)
Восполняю пробел:

#include <stdlib.h>

unsigned int randomDigit;

void main(void) {
randomDigit = rand()% 256;// % - это взятие остатка от деления.
};


Консультировал: Sergijj
Дата отправки: 20.12.2006, 11:05

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Мини-форум консультации № 67576

Посетитель

ID: 439

# 1

= общий = | 18.12.2006, 20:54 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

да, забыл про rand. Подели rand () на (RAND_MAX/256) - получишь числа в диапазоне [0, 256]. если нужно [0, 256) - то дели на 255.

 

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

Яндекс Rambler's Top100

главная страница | поддержка | задать вопрос

Время генерирования страницы: 0.25274 сек.

© 2001-2018, Портал RFPRO.RU, Россия
Калашников О.А.  |  Гладенюк А.Г.
Версия системы: 7.55 от 06.11.2018