![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
PandaRus |
|
|||
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 27.12.2006 Репутация: нет Всего: нет |
Добный день.
Одной из составных частей моего диплома является расчет распределения токов в теле человека между электродами. Пишу в Visual C++. Вообще вперые в С++. Столкнулся с проблемой, что как только объем обьявленных переменных превысит где-то 1.5Мб программа перестает работать. Программа использут для расчета матрицу проводимостей - требуется массив около 65000х65000 (что соответствует телу, разбитому на 100х25х25 точек). Очень жаль при объеме ОЗУ в Гб получить от программы 1Мб. Подскажите, можно ли в программе задавать любой объем используемой памяти. С уважением, Иван. Срочно. ![]() |
|||
|
||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
У тебя объявление статическое? Тогда увеличь максмальный размер стека (должно быть в настройках проекта).
Если динамическое, то такого быть не должно и код на выкладку. |
|||
|
||||
PandaRus |
|
|||
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 27.12.2006 Репутация: нет Всего: нет |
Насчет объявления - не знаю. Как запустил программу - инчего не менял. В тулсах>опции вроде все облазил - что-то про память не нашел.
От текса моей программы не зависит, так как не работает даже такая голая программа:
При запуске появляется стандартное окно Винды об ошибке о том, что в моем "..." .exe обнаружена ошибка. У меня Visual6.0. Может попробовать на другом компе или например на Байсике? Это сообщение отредактировал(а) PandaRus - 27.12.2006, 17:56 |
|||
|
||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Ты пытаешься в стеке выделять sizeof(float) * 1000 * 1000 = ~4Мб памяти! Статически. По умолчания программа не имеет столько большого стека! Выделяй это дело динамически. Как - поиск по форуму, тема поднималась не раз - "Динамическое выделение памяти". Добавлено @ 18:04
А вообще место 1000 лучше использовать целые константы. |
|||
|
||||
Любитель |
|
|||
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 24 Всего: 92 |
Про делит надо было бы напомнить, а то многие начинающие забывают.
|
|||
|
||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Не вопрос: напоминаю:
![]() в конце использования данной памяти ее очень желательно освободить:
|
|||
|
||||
PandaRus |
|
|||
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 27.12.2006 Репутация: нет Всего: нет |
Большое спасибо за оперативность
![]() А если выделять память под B=XxYxZ то будет так?:
|
|||
|
||||
Любитель |
|
|||
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 24 Всего: 92 |
Нет. Трёхмерный массив - это массив из двумерных массивов. Типа такого:
Аналогично удаление. А ты уверен, что тебя трёхмерный массив, нужен кстати. Может стоит посмотреть в сторону каких-нибудь математических библиотек (с хорошей оптимизацией)? |
|||
|
||||
PandaRus |
|
|||
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 27.12.2006 Репутация: нет Всего: нет |
Трехмерные массивы только для ввода/вывода характеристик тела (матрицы: потенциалов[x][y][z] в точках и проводимостей между этими точками). Под них память выделять не буду - и так хватит. Но вот для расчетов потребуется гигантская матрица проводимостей G=[x*y*z][x*y*z]- по расчетам уйдет около 250 метров.
В основе решения - метод узловых потенциалов - результат получается очень быстро (для больших массивов) при использовании к G метода Гаусса. Пока правда программа работает в плоскости, предстаит добавление еще одной координаты Z. Предчувсвую кипени мозгов при составлении G. ![]() Это сообщение отредактировал(а) PandaRus - 27.12.2006, 19:39 |
|||
|
||||
MINI_PROGRAMMER |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 28.12.2006 Репутация: нет Всего: нет |
Товарищи! Программирую Windows-окна. Недавно узнал про PlaySound, создал програмку, скомпилировал.
ОШИБКА! [Linker error] undefined reference to `PlaySoundA@12' . Подскажите, в чём дело! ![]() Работаю в Dev-C++ v. 4.9.9.2 Это сообщение отредактировал(а) MINI_PROGRAMMER - 28.12.2006, 22:54 |
|||
|
||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Подключи к проекту winmm.lib
|
|||
|
||||
MINI_PROGRAMMER |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 28.12.2006 Репутация: нет Всего: нет |
Thank you!
![]() |
|||
|
||||
PandaRus |
|
|||
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 27.12.2006 Репутация: нет Всего: нет |
Добрый день.
Подскажите в чем проблема? Вариант для поверхности работает, а что здесь - не знаю. Программа немного недоработана по алгоритму, но ошибка не в этом - просто не компилируется.
P.S. Как-то уж очень нецеремонно влезли... Это сообщение отредактировал(а) PandaRus - 15.1.2007, 20:47 |
|||
|
||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Во-первых, следовало бы создать новую тему...
Во-вторых, телепаты в отпуске надолго, ты б сказал, что ли, в каких строках ошибки, мы ж не компиляторы все-таки. ![]() |
|||
|
||||
PandaRus |
|
|||
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 27.12.2006 Репутация: нет Всего: нет |
Действительно, программа показала что ошибка в 76 строке - деление на 0. Оказалось, что r=0, хотя в 31 строке r=30 и больше вроде не меняется. Хорошо, в след. раз буду создавать новые темы. P.S. И в каком разделе мне задавать вопросы типа "Как мне создавать и решать матрицы проводимостей для объектов размеров около 10000*1000*1000 узлов - никакой оп.памяти не хватит?"; "Где и как мне можно нарисовать объект, чтобы он автоматически мог затем рассчитываться в будущей моей программе?" |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |