Очевидная причина, "почему" это, предполагает, что у Вас есть класс как это:
class Foo
{
public:
void SomeFunction()
{
cout << _obj->value << endl;
}
private:
SomeObject *_obj;
}
И затем Вы инстанцируете одного Foo
и вызов SomeFunction
, это даст нарушение прав доступа, пытающееся читать 0xCDCDCDCD
. Это означает, что Вы забыли инициализировать что-то. Это "почему часть". В противном случае тогда указатель, возможно, выстроился в линию с некоторой другой памятью, и будет более трудно отладить. Это просто сообщает причину, что Вы получаете нарушение прав доступа. Обратите внимание, что этот случай был довольно прост, но в большем классе легко сделать ту ошибку.
AFAIK, это только работает над компилятором Visual Studio когда в режиме отладки (в противоположность выпуску)
Если вы выполняете запрос в контексте транзакции, значение тайм-аута транзакции монитора транзакций JTA будет определяющим для тайм-аута запроса. Конфигурация для этого зависит от одного сервера приложений к другому.
На уровне отдельного запроса (при отсутствии монитора транзакций JTA) метод setQueryTimeout может использоваться для установки тайм-аута при выполнении объекта Statement / PreparedStatement / CallableStatement.
Обновление
setQueryTimeout не следует использовать, хотя он работает (по крайней мере, от клиента J2SE). Он работает через драйвер JDBC, выполняя полный цикл работы с сервером базы данных Oracle. Затем база данных должна остановить выполнение запроса. Не полагайтесь на него для приложений, критичных по времени.
Взгляните на профили Oracle. Это позволяет вам указать несколько ограничений на уровне базы данных. Один из них - максимальное время ЦП на запрос.
Если у вас есть запросы, выполняемые более 2 минут на регулярной основе, вы можете сначала настроить свои запросы.