Visual Studio 2005 C ++ во время выполнения нового исключения - PullRequest
0 голосов
/ 20 апреля 2009

У меня есть проект VS 2005 C ++ со сборками Debug и Release. Я попробовал следующие 4 вещи:

  1. Создайте исполняемый файл Debug через Visual Studio и запустите его через Visual Studio.
  2. Запускать встроенный исполняемый файл (1) извне через командную строку (Cygwin) после cd 'до vstudio/debug.
  3. Создайте исполняемый файл Release через Visual Studio и запустите его через Visual Studio.
  4. Запуск исполняемого файла (3), выполняемого извне, через командную строку (Cygwin) после cd в vstudio/release.

Первые три успешно завершены: программа выполняется до конца.

Четвертый, однако, вылетает во время выполнения. Отладка показывает, что виновником является вызов malloc() внутри оператора new(). Соответствующий контекст выглядит примерно так:

template<typename T> class Foo {
    ...
    static void bar() {
        ...
        T* ptr = new T();
        ...
    }
    ...
}

Если кто-то может подумать о какой-либо проблеме, которая может привести к описанным мною симптомам «3 из 4», это будет очень ценно.

Ответы [ 2 ]

1 голос
/ 20 апреля 2009

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

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

Я не знаю вашего окружения, но вам, вероятно, стоит найти инструмент, такой как BoundsChecker, чтобы найти ошибку.

0 голосов
/ 20 апреля 2009

Моим первым предположением будет то, что у cygwin есть запасные библиотеки DLL для некоторых из библиотек DLL Windows, для которых была создана ваша программа.

Хороший способ проверить это - запустить командную оболочку Windows (cmd.exe) и посмотреть, не появляется ли такая же ошибка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...