'That done: stuff'
- это метка , а goto
используется для выполнения прыжка , то есть продолжения выполнения программы в совершенно другом месте с меткой в пределах той же функции. Таким образом, в случае ошибки выполнение продолжается непосредственно под строкой, которая гласит done_err:
- после создания отчета об ошибке он переходит к обычной точке возврата, которая находится за меткой done:
.
У вас проблемы с чтением, у меня проблемы с чтением. У всех есть проблемы с чтением. Итак:
Это очень плохая практика в C ++. Поэтому не используйте goto , если у вас нет веских причин.
Та же логика может быть выражена следующим образом:
if(FAILED(hr = CoInitialize(NULL)))
{
// HandleError could display a messagebox or print to a log file ...
HandleError(hr);
return hr;
}
// do something meaningful
return 0;
Что касается вашего крушения - мы очень мало можем с этим поделать. Скорее всего, вы где-то вызываете какое-то повреждение данных (моя догадка, я никогда не использовал этот материал ADO самостоятельно: вы теряете дескриптор соединения, то есть вы не освобождаете его до вызова CoUnitialize). Проверьте оставшуюся часть кода на наличие недостатков, но сначала избавьтесь от этих ошибок.