0 / 0 / 0
Регистрация: 22.09.2007
Сообщений: 314
|
||||||
1 | ||||||
Массив булевых элементов по входящему значению11.11.2011, 01:28. Показов 8013. Ответов 17
Метки нет (Все метки)
что-бы можно было задавать его размер по входящему в функцию значению. По стандару нельзя объявлять размер массива (статического) значением, которое на момент компиляции не определено. Что делать? Голову сломал. Размер этого массива зависит именно от переменной range, делать его заведомо большим - некрасиво, к тому же есть ситуации, когда его все равно не хватит, то есть даже M[2000] - может не хватить в отдельных случаях. а иногда хватит и M[1]. Подскажите пожалуйста...
0
|
11.11.2011, 01:28 | |
Ответы с готовыми решениями:
17
Ввести массив, состоящий из 14 элементов целого типа. Найти количество элементов четных по значению. Одномерный массив. Вычислить разность C= A-B, где А-произведение положительных элементов, а В- сумма элементов по абсолютному значению массива Ввести массив, состоящий из 20 элементов целого типа. Определить каких элементов больше четных или нечетных по значению Сортировать массив элементов по присвоенному значению! |
7 / 7 / 12
Регистрация: 13.02.2007
Сообщений: 1,255
|
||||||
11.11.2011, 02:22 | 2 | |||||
0
|
0 / 0 / 0
Регистрация: 22.09.2007
Сообщений: 314
|
|
15.11.2011, 12:14 [ТС] | 3 |
С-П-А-С-И-Б-О!
p.s. Что-то форум перестал на мыло автоматически скидываться
0
|
0 / 0 / 0
Регистрация: 22.09.2007
Сообщений: 314
|
||||||
16.11.2011, 23:34 [ТС] | 4 | |||||
Во-первых он вдруг (посде очередного ребилда) стал выдавать такое окно.
Во-вторых все-равно виснет. То есть память-то он выделяет, но при range > 10 на пятом вызове процесс падает! Я отслеживал через task manager, на каждом вызове (т.е. при каждом вызове ф-ии Сcurve) этот процесс памяти жрет все больше и больше. Почему??? Ведь delete же!
0
|
7 / 7 / 12
Регистрация: 13.02.2007
Сообщений: 1,255
|
|
17.11.2011, 02:23 | 5 |
Хм... при range = 11 работает нормально выделяет массив bool переменных размером 2047, удаление тоже проходит на ура, при выходе в Debug режиме не пишет никаких ошибок. VC++ входящий в состав VS.NET 2002/2003/2005 при выходе из Debug режима автоматически отлавливает все memory leaks и выдает отчет о всех в Output окне.
Приведенный кусок программы работает без утечек памяти. Так что, либо ошибка/утечки в неприведенном куске кода (// использование pM[]), либо проблемы с компилятором/опциями компилятора. С уважением, Владимир P.S. Использую VS.NET 2003 и VS.NET 2005 Beta 2 с указанной вами проблемой еще пока ни разу не сталкивался.
0
|
0 / 0 / 0
Регистрация: 13.11.2011
Сообщений: 6
|
||||||
17.11.2011, 10:18 | 6 | |||||
Привет.
Попробуй использовать std::vector<bool>:
0
|
0 / 0 / 0
Регистрация: 22.09.2007
Сообщений: 314
|
|
17.11.2011, 12:03 [ТС] | 7 |
Сообщение от boombastik
0
|
0 / 0 / 0
Регистрация: 22.09.2007
Сообщений: 314
|
|
17.11.2011, 12:07 [ТС] | 8 |
то M.S.N.
Спасибо, надо попробовать
0
|
1 / 1 / 2
Регистрация: 05.08.2009
Сообщений: 96
|
|
17.11.2011, 14:01 | 9 |
Сообщение от petrovich1
К примеру если range==30,то это уже приблезительно 1 Гиг мозгов которые хотим зарезервировать,и комп естественно засопративляеться. функция void Сcurve(int range) правильная,тоько можно добавить перед bool* pM = new bool[q]; проверку q на мега большое число, и после bool* pM = new bool[q]; проверку pM на не равенcтво NULL.
0
|
0 / 0 / 0
Регистрация: 22.09.2007
Сообщений: 314
|
|
17.11.2011, 14:26 [ТС] | 10 |
Сообщение от Kovalsky2
Статистика памяти примерно такая: при первом вызове: процесс ест 35% памяти при втором: 65% при третьем: 85% при четвертом: 99% при пятом вызове функции процесс падает
0
|
1 / 1 / 2
Регистрация: 05.08.2009
Сообщений: 96
|
|
17.11.2011, 15:23 | 11 |
На чём конкретно вылетает после 5 вызова?
0
|
0 / 0 / 0
Регистрация: 22.09.2007
Сообщений: 314
|
|
17.11.2011, 15:39 [ТС] | 12 |
Сорри, под памятью я имел ввиду процессорное время (ну эти проценты в task manager). Я запускал в режиме without debuging, на пятом вызове приложение выдает окно "программа выполнила недопустимую операцию...", стандартное окно в XP. Как посмотреть конкретно на чем вылетает не знаю.
0
|
0 / 0 / 0
Регистрация: 22.09.2007
Сообщений: 314
|
|
17.11.2011, 15:41 [ТС] | 13 |
а может экономичнее использовать массив int? Я все равно его как массив семафоров использую.
0
|
1 / 1 / 2
Регистрация: 05.08.2009
Сообщений: 96
|
|
17.11.2011, 15:49 | 14 |
2petrovich1
Поставте пару Breakpoints и пошагово пройдитесь по функции,и прикинте где вылетает. А параллельные потоки в проге используете?
0
|
0 / 0 / 0
Регистрация: 13.08.2011
Сообщений: 5
|
||||||
17.11.2011, 16:08 | 15 | |||||
Но это если использовать C, идеология C++ может отличаться (не силен в этом вопросе).
0
|
0 / 0 / 0
Регистрация: 22.09.2007
Сообщений: 314
|
|
17.11.2011, 18:46 [ТС] | 16 |
Все, нашел багу. Оказалось действительно в использовании pM. Утечка памяти была, но в другом месте. Но все равно полезный топик получился - три разных способа.
0
|
7 / 7 / 12
Регистрация: 13.02.2007
Сообщений: 1,255
|
|
18.11.2011, 04:02 | 17 |
Да не, получается один C-шный способ ("устаревший"), один неэкономичный и один прямой ("в лоб").
Если программируешь на C++, то пользоваться C-шным способом не имеет смысла, предложенный первый способ с new/delete делает то же самое, только запись команд чуть более лаконична. Хотя странно, по-моему, в C нет типа bool, только если использвать #typedef bool int. malloc делает то же самое что и new, free эквивалетен delete, только вот в C-варианте придется вычислять размер памяти выделяемой под массив и при ее освобождении, а С++ операторы new и delete[] делают это автоматически (причем, насколько мне известно, на этапе компилирования). Способ с вектором хоть и выглядит симпатичным (освобождение памяти происходит автоматически в деструкторе шаблона вектора), но очень прожорлив и в данном случае не имеет смысла. НО, если предполагается динамическое расширение массива, то я бы рекомендовал именно использование вектора, в противном случае его использование - бессмысленная потеря времени на ряд операций. Впрочем, STL неплохо оптимизирована, вполне возможно после компиляции с оптимизацией получиться близкий по производительности код к классическим С++ и С решениям. С уважением, Владимир
0
|
0 / 0 / 0
Регистрация: 22.09.2007
Сообщений: 314
|
|
19.11.2011, 11:55 [ТС] | 18 |
Остановился на new-delete< хотя в конкретно моем примере разницы никакой не было. Все три способа освобождались с одинаковой скоростью, и во всех трех случаях процесс падал при range = 25; и даже не запускался при range > 25;(писал "Out of memory")
На машине стоит 512 метров мозгов
0
|
19.11.2011, 11:55 | |
19.11.2011, 11:55 | |
Помогаю со студенческими работами здесь
18
Массив: Вычислить количество четных ( по значению ) элементов массива... Массив: Вывести на экран и определить количество элементов, не равных значению x. Массив: Найти количество элементов массива, равных наименьшему значению Сформировать массив из элементов исходного, превосходящих по абсолютному значению заданную величину A Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |