2010-09-15 4 views
0

Мне было интересно узнать больше о смешении времени выполнения между exes и dll. На машине WinXP я создал сборку dll для среды исполнения (MD) и exe, которая вызывает функцию в DLL, которая построена debug (/ MDd). Функция в dll выделяет память в кучу, и exe удаляет ее. Я ожидал, что это сбой, однако, он висит вместо этого. Использование ProcessExplorer Я вижу, что состояние исполняемого файла - «wait: userrequest». То же самое упражнение на машине Vista делает показывает диалог. Я хочу увидеть диалог на моей машине XP тоже!Почему я не вижу диалоговое окно «Ошибка приложения»?

Я пробовал противопоставить все предложения here. Я уже давно занимаюсь поиском в Интернете. Я играл с поддержкой всех служб отчетов об ошибках, которые я мог найти в gpedit.msc, а также подтвердил, что Служба отчетов об ошибках работает в диалоговом окне AdministrativeTools-> Services.

Чтобы быть явными, вот моя длл:

int* getDllMem(){ 
    printf("dll alloc mem"); 
    int *ptr = new int; 
    return ptr; 
} 

Вот мой ех:

int main() 
{ 
    printf("main\n"); 
    int *ptr = getDllMem(); 
    printf("main delete\n"); 
    delete ptr; 
    printf("main exit\n"); 
    return 0; 
} 

ответ

2

Ваша программа ушла в неопределенное и ошибочное поведение. Зачем ожидать точно такой же результат в разных операционных системах?

Если во время выполнения на каждой из этих машин происходит что-то даже незначительное, это может привести к тому, что он повесится, а другой сразу же сработает.

Возможно, время, в течение которого программа работает, несколько отличается между этими машинами/операционными системами. Возможно, другие аспекты операционной системы оказывают влияние (например, address space layout randomization).

Я подозреваю, что только кто-то с очень близкими знаниями о времени выполнения и кучевом менеджере может точно ответить, почему существует разница.

Честно говоря, моя реакция на вопрос: вы не должны тратить слишком много времени на то, чтобы беспокоиться о том, почему неудача программы отличается от этих двух операционных систем, потому что вы никогда не должны писать такую ​​программу в первую очередь.

0

XP и Vista, имеют различную архитектуру системы, и, возможно, другой код сборки. На какой машине вы скомпилировали программу? XP или Vista?

+0

Программа составлена ​​только на XP. При копировании в Vista я вижу диалог с ошибкой. – JamesG

+0

Возможно, быстрое решение может заключаться в использовании инструкций try/catch и грамотно обрабатывать ошибки. – alexy13

Смежные вопросы