none
Отключение кеширования значений переменных в Windows Form CLR C++ приложениях RRS feed

  • Вопрос

  • Здравствуйте! Долго я не мог понять почему мой код работает не так как нужно и только что оказалось, что значения некоторых динамических переменных почему-то остаются такими же, даже после перезапуска ПК значения переменных остались такими же. Вот пример такой переменной:

    int key_len = 1 + rand() % 100;

    Почему значение переменной key_len не меняется после перезапуска программы и даже после пересборки программы?

    При этом если выполнить в другом месте код 

    1 + rand() % 100;

    то я получу другое значние.. значит rand() всё-таки работает, причина проблемы именно в том, что net framework запомнил и хранит где-то результат выполнения этого кода. Или как вариант это выполнилось ещё на этапе компиляции... 

    В общем как можно отключить это кеширование, чтобы мой код работал нормально?.. Работаю с Visual Studio 2017 (C++, Net Framework 4.6)

    22 ноября 2019 г. 17:39

Все ответы

  • Здравствуйте! Долго я не мог понять почему мой код работает не так как нужно и только что оказалось, что значения некоторых динамических переменных почему-то остаются такими же, даже после перезапуска ПК значения переменных остались такими же. Вот пример такой переменной:

    int key_len = 1 + rand() % 100;

    Почему значение переменной key_len не меняется после перезапуска программы и даже после пересборки программы?

    При этом если выполнить в другом месте код 

    1 + rand() % 100;

    то я получу другое значние.. значит rand() всё-таки работает, причина проблемы именно в том, что net framework запомнил и хранит где-то результат выполнения этого кода. Или как вариант это выполнилось ещё на этапе компиляции... 

    В общем как можно отключить это кеширование, чтобы мой код работал нормально?.. Работаю с Visual Studio 2017 (C++, Net Framework 4.6)

    Разумеется никакого "кэширования" нет и никогда не было. Более того, ваш код вообще не использует .Net.

    А причина в том что вы неверно интерпретируйте ваши наблюдения.

    В данном случае все работает правильно согласно спецификации rand() которая всегда генерирует одну и ту же последовательность. Таким образом значение переменной будет всегда одно и то же хотя оно конечно же присваивается заново каждый раз.

    Чтоб этого не происходило надо вызвать функцию srand() и установить случайное начальное значение для rand(). Обычно для этого используется текущее время.


    This posting is provided "AS IS" with no warranties, and confers no rights.

    22 ноября 2019 г. 22:08
    Модератор