Исключения, вызывающие нежелательные данные в строке (C #) - PullRequest
1 голос
/ 08 октября 2008

Хорошо, это странно. Нежелательные данные также не случайны, а являются подстроками самого исполняемого файла.

private void Form1_Load(object sender, EventArgs e)
{
    string s = GetValue();
    // at this point, s == "400". Why isn't really relevant (dumbed down a test)
    if (s != "18446744073709551615") 
        throw new Exception();
        // When the exception is thrown though, the string is set to random
        // data from inside the executable.
}

Кажется, это зависит от некоторых, казалось бы, незначительных деталей реализации в GetValue (), таких как вызовы string.Format (), находящихся в разных местах.

Кто-нибудь когда-нибудь сталкивался с чем-то подобным или есть идеи, что может вызвать это?

Ответы [ 2 ]

2 голосов
/ 08 октября 2008

"И я проверяю это в окне" Местные жители "в VS"

Это объясняет это. Вопреки распространенному мнению, C # может выполнять некоторую оптимизацию. Если вы не добавляете «KeepAlive» в конце своей функции, значение на самом деле не нужно хранить.

0 голосов
/ 08 октября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...