My C ++ App аварийно завершает работу только в режиме выпуска и Windows 7 - PullRequest
3 голосов
/ 03 ноября 2010

Я очень разочарован падением моего приложения в Release Mode в Windows 7.

В основной функции я все убрал:

int main(int argc, char **argv, char **envp) {
    return (0);
}

Но у меня есть много директив, переменных и функций, определенных вне основных функций.

Вылетает только в режиме выпуска на Windows 7. Режим отладки в Windows 7 в порядке; Режимы Debug и Release в Windows XP в порядке.

Поскольку я не могу отлаживать, я не знаю, что делать.

Ошибка:

Unhandled exception at 0x00dc21ca in MyApp.exe: 0xC0000005: Access violation reading location 0x8496a9bb.

Сборочная линия:

00DC21CA  mov         eax,dword ptr [edx+0Ch] 

Это так безумно, пожалуйста, помогите.

Peter

P.S .: Если я удалил все, что я определил за пределами основного, то все в порядке.

П.С .:

char* AllocArgsMemory()
{
    return (char*)malloc(2); // works: return NULL
                             // So it seems the malloc has some problems
}

Ответы [ 3 ]

1 голос
/ 03 ноября 2010

Проверьте все указатели, которые вы используете.То, как происходит сбой вашего приложения, показывает, что вы разыменовываете нулевой указатель или выход за пределы предварительно выделенного диапазона памяти (например, массива).Вероятно, это связано с неинициализированным указателем или слишком большим индексом подписки.

В режиме отладки не происходит сбой, потому что в режиме отладки обычно инициализируется неинициализированная память с предопределенным значением, например 0xcccccccc, чтоне бывает в режиме релиза.

0 голосов
/ 08 ноября 2010

Даже если это бинарный файл релиза, вы должны создать файл полного символа (.pdb), чтобы вы могли иметь достойный стек вызовов при возникновении вашей проблемы.Чтобы получить его: запустите любой отладчик (WinDbg, Visual Studio и т. Д.), Настройте его так, чтобы он останавливался при исключении нарушения прав доступа, начинал работу с ним, он должен сломаться при возникновении исключения и дать вам стек вызовов.Помните, что отладчик может запустить все, что может быть выполнено;даже если у вас нет ссылок на исходный код и значения локальных переменных, у вас может быть другая полезная информация.

Надеюсь, это поможет.

0 голосов
/ 03 ноября 2010

Похоже, это могут быть некоторые из встроенных настроек / свойств. Мне нечего вам предложить (частично из-за недостатка информации), но если он работает в режиме отладки в Windows 7, как установка всех параметров / свойств сборки в RELEASE так же, как в DEBUG. Если это работает, вы знаете, что это проблема с настройкой сборки

...