Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
10 / 10 / 0
Регистрация: 05.12.2011
Сообщений: 182
.NET 4.x

Странная ошибка в функции: корректно работает только при наличии точек останова

03.05.2012, 21:47. Показов 966. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть ф-ция:
VB.NET
1
2
3
4
5
6
7
8
9
Function GetPass(ByVal len As Byte) As String
        Dim out As String = ""
        Dim chrs As String = "qwertyuiopasdfghjklzxcvbnm1234567890QWERTYUIOPASDFGHJKLZXCVBNM"
        For i As Byte = 1 To len
            Dim c As Integer = (New Random).Next Mod chrs.Length
            out &= chrs(c)
        Next
        Return out
    End Function
Которая логически не должна выдавать пароли типа "XXXXX", но выдает... Все становится еще интереснее, если поставить ТОчку останова на
VB.NET
1
out &= chrs(c)
В этом случае ф-ция начинает работать так, как должна.
Я конечно понимаю, что г*внокод еще тот, но не настолько же, что б VS2010 не нравиться
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.05.2012, 21:47
Ответы с готовыми решениями:

В одной из функций код работает только при наличии точек останова
Пишу программу на C#, появилась проблема которая ввела меня в ступор. участок кода выполняется только в том случае, если там поставить там...

Странная ошибка ОС Windows инициировала точку останова
Что могло вызвать такую ошибку ? При нажатии кнопки продолжить программа успешно работает дальше :) При нажатии кнопки...

Макрос корректно работает только при повторном запуске
День добрый! Неоднократно сталкиваюсь, что макрос корректно работает, если не выходить из Word и запустить повторно. Никаких ошибок. ...

2
 Аватар для Юпатов Дмитрий
1721 / 1208 / 228
Регистрация: 23.12.2010
Сообщений: 1,544
03.05.2012, 23:30
Выносим создание экземпляра класса Random из цикла:
VB.NET
1
2
3
4
5
6
7
8
9
10
Function GetPass(ByVal len As Byte) As String
        Dim out As String = ""
        Dim chrs As String = "qwertyuiopasdfghjklzxcvbnm1234567890QWERTYUIOPASDFGHJKLZXCVBNM"
        Dim rn As Random = New Random
        For i As Byte = 1 To len
            Dim c As Integer = rn.Next Mod chrs.Length
            out &= chrs(c)
        Next
        Return out
    End Function
Зачем:
Цитата Сообщение от MSDN
Начальное значение по умолчанию извлекается из системных часов, которые обладают конечной разрешающей способностью. Вследствие этого различные объекты Random, создаваемые в закрытой последовательности путем вызова конструктора по умолчанию, будут обладать одинаковым начальным значением по умолчанию и, как результат, будут производить идентичные наборы случайных чисел. Эту проблему можно устранить, используя единый объект Random для генерации всех случайных чисел. Можно также обойти его, изменив начальное значение, возвращенное системным часами, а затем явно предоставив это новое начальное значение конструктору Random(Int32).
Я выбрал первый способ:Эту проблему можно устранить, используя единый объект Random для генерации всех случайных чисел
Второй способ не помог - содержимое цикла слишком быстро обрабатывается, чтобы привязать к тикам системных часов...
Собственно, отсюда и объяснение нормального поведения функции при отладке с точкой останова: мы тормозили выполнение функции в каждой итерации, соответственно, новый экземпляр Random создавался с новой последовательностью случайных чисел.
1
10 / 10 / 0
Регистрация: 05.12.2011
Сообщений: 182
04.05.2012, 16:29  [ТС]
Да, действительно, все довольно просто. Че я не додумался посмотреть старые проекты...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.05.2012, 16:29
Помогаю со студенческими работами здесь

При наличии border 1px сайт отображается корректно, а при border 0px разлетается
При наличии border 1px сайт отображается корректно, а при border 0px разлетается. Помогите решить проблему. Спасибо.

При вызове функции через поток кнопкой все проходит корректно, но через таймер срабатывает только раз
Приложение для архивирования баз 1С 7.7. все работает хорошо только вот функция ведет себя странно.. При вызове функции через поток...

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

Правильная компиляция при наличии только коротких переходов...
Как правильно компилировать циклы и условия при наличии только коротких переходов 256 байт...У меня одно выражение столько весит...

Выдавать подтверждение на сохранение изменений только при их наличии
На кнопке закрытия: Private Sub Закрыть_Click() If MsgBox(Сохранить изменения?", vbYesNo) = vbNo Then Me.Undo ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru