Есть ли в gcc переключатель компилятора, который предотвращает утечку случайных данных в конечном исполняемом файле?

У меня была аналогичная проблема, которую я решил с помощью следующей техники:

Исключение было выбрано в следующей строке кода (см. текст, украшенный ** ниже):

static void Main(string[] args)
    {

        double number = 0;
        string numberStr = string.Format("{0:C2}", 100);

        **number = Double.Parse(numberStr);**

        Console.WriteLine("The number is {0}", number);
    }

После небольшого исследования я понял, что проблема заключалась в том, что форматированная строка включала знак доллара ($), который методы Parse / TryParse не могут решить (т. е. отключить). Поэтому, используя метод Remove (...) строкового объекта, я изменил строку на:

number = Double.Parse(numberStr.Remove(0, 1)); // Remove the "$" from the number

. В этот момент метод Parse (...) работал как ожидалось.

0
задан user1798340 17 January 2019 в 05:52
поделиться

1 ответ

Проблема, которую вы наблюдаете, основана на использовании assert. Так как assert напечатает сообщение о сбое, которое обычно (всегда?) Включает в себя реальный тест подтверждения (21 <= qrsize && qrsize <= 177 && 0 <= x && x < qrsize && 0 <= y && y < qrsize), имя файла и номер строки.

Если вы скомпилируете с -DNDEBUG, вы отключите assert с. Я не копался в полученном объектном файле, но фрагмента, который вы указали ранее, там нет.

0
ответ дан Stephen Newell 17 January 2019 в 05:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: