Hungry Mind , Blog about everything in IT - C#, Java, C++, .NET, Windows, WinAPI, ...

Always initialize variables

Наверное с каждым случалось, что при запуске релизной версии она вообще не работает. Недавно это опять произошло со мной. Следующий код ругался матом (assert-ом):

UErrorCode uError;
ucnv_fromUnicode(_pConverter, &pTarget, pTargetLimit, &pSource, pSourceLimit, NULL, true, &uError);
assert(U_SUCCESS(uError));

В результате была произведена модификация UErrorCode uError(U_ZERO_ERROR); и все заработало. Но самое интересное - кусок кода библиотеки ICU:

U_CAPI void U_EXPORT2
   ucnv_fromUnicode(UConverter *cnv,
                    char **target, const char *targetLimit,
                    const UChar **source, const UChar *sourceLimit,
                    int32_t *offsets,
                    UBool flush,
                    UErrorCode *err) {
      UConverterFromUnicodeArgs args;
      const UChar *s;
      char *t;

        /* check parameters */
      if(err==NULL || U_FAILURE(*err)) {
         return;
      }

Пользы никакой, а мороки прибавляет.

Итог: всегда инициализируйте переменные значениями.

PS: Во всех других местах uError была инициализирован правильно. Случается.

0 коммент.:

Отправить комментарий

Copyright 2007-2011 Chabster