Как будто вы пытаетесь получить доступ к объекту, который является null
. Рассмотрим ниже пример:
TypeA objA;
. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException
, что имеет смысл.
См. Также этот пример:
String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
Ну, с одной стороны, это может быть, потому что исполняемые файлы, созданные с MSVS 6, требуют только msvcrt.dll (C время выполнения), который поставляется с Windows теперь.
MSVS 2 008 исполняемых файлов нужен msvcrt9, поставленный с ними (или уже установленный).
Плюс, у Вас есть много библиотек OSS, уже скомпилированных для Windows 32 бита с 6.0 временами выполнения C, в то время как на 2008 C время выполнения необходимо взять источник и скомпилировать их сами.
(большинство тех библиотек на самом деле компилируется с MinGW, который также использование 6.0 времен выполнения C - возможно, это - другая причина).
Visual C++ 6 может быть очень ошибочным время от времени по сравнению с 2008. Некоторые вещи в особенности:
sometemplate<othertemplate<t>>
не работа, но sometemplate< othertemplate<t>
> работа)Иногда разработка в VS6 испытывает желание пытаться получить веб-сайты, выглядящие хорошей в internet explorer 5.5
одна жесткая вещь, с которой мы встретились, состояла в том, что "значение" стало ключевым словом.
Быстрый список улучшений Вы будете видеть движение от 6,0 до 2008:
Одна вещь, которую иногда забывают люди, состоит в том, что VS 6.0 более чем 10 лет теперь! На данном этапе я не вижу, как любой хотел бы придерживаться его.
VS2008 имеет лучший компилятор (намного больше стандартов совместимая, лучшая оптимизация...).
VS6 имеет намного более быстрый IDE. VS2008 IDE имеет много хороших функций, но это - минимум медленнее, чем VS6.
2008 Visual C++ является намного большим количеством совместимых стандартов (Visual Studio 6 не поддерживает стандартный набор C++ в 1998).
Начиная с VC6 большая часть фокуса Visual Studio была на C# и.NET, а также других функциях, таким образом, некоторые старики C++ рассматривают VC6 как добрые старые времена. Вещи улучшились в Visual Studio для разработчиков C++ с тех дней, но совсем не как существенно что касается пользователей.NET.
Один способ, которым VS2008 значительно лучше, чем VC6, состоит в том, что он может разработать проекты C++ параллельно. Это может привести к значительно более быстрым сборкам даже в единственной системе ЦП, но особенно если у Вас есть несколько ядер.
Помимо упомянутого выше развертывания, основным преимуществом MSVC 6.0 является скорость. Поскольку это - 10-летний IDE, это чувствует себя довольно быстрым на современном компьютере. Более новые версии Visual Studio предлагают больше расширенных функций, но они прибывают в стоимость (сложность и более медленная скорость).
Но самый большой недостаток MSVC 6.0 является своим несовместимым C ++-Compiler и Библиотекой. Если Вы намереваетесь сделать серьезное Программирование на C++, это - выставочный стопор. Если Вы только создаете Приложения MFC, это - вероятно, не большая часть проблемы.
Первое, что пришло на ум преимущества новой Visual Studio:
Недостатки:
Знаете ли Вы, что реализация VC6 MS STL не ориентирована на многопотоковое исполнение? В частности, оптимизация подсчета ссылок в basic_string аварийно завершается, даже когда скомпилировано с многопоточными библиотеками. http://support.microsoft.com/kb/813810
Преимущества Visual Studio 2008 по Visual C++ 6.0:
Недостатки перемещения в Visual Studio 2008:
В духе недавнего сообщения в блоге Joel я объединил некоторые из других ответов, отправленных в единственный ответ (и сделали это общественным сообщением, таким образом, я не получу представителя от него). Я надеюсь, что Вы не возражаете. Большое спасибо Laur, NeARAZ, 17 из 26, me.yahoo.com и все остальные, кто ответил. - ChrisN
Я хотел бы добавить, что не то, что приложения, разработанные использующий Visual C++ 2008, должны потребовать большего количества DLLs, чем те разработанный Visual C++ использования 6.0. Это - просто конфигурация проекта по умолчанию.
Если Вы входите в свои свойства проекта, C/C++, Генерацию кода, то изменяете Вашу Библиотеку времени выполнения от Многопоточного DLL и Многопоточной Отладки DLL (Выпуск и Настройки отладочного процесса) к Многопоточной и Многопоточной Отладке, Ваше приложение должно затем иметь меньше зависимостей.
Visual C++ 6.0 интегрируется с инструментами отслеживания памяти, теми, которые Очищают, HeapAgent, BoundsChecker и MemCheck, полностью и хорошо так как те инструменты отслеживания памяти активно сохранялись и настойчиво продавались после того, как Visual C++ 6.0 вышел.
Однако, так как C++ был вне моды некоторое время, компании, которые продают инструменты отслеживания памяти все еще, продают их, но никогда не обновляют или интегрируют их с новыми версиями Visual C++, включая Visual Studio 2008. Так, использование инструментов отслеживания памяти с Visual Studio 2008 печально, подвержено ошибкам и, в некоторых случаях, невозможно.
Если вы установите все пакеты обновлений для VS6, у вас все еще будет надежная комбинация IDE / компилятора. Как разработчик программного обеспечения, который должен выпускать продукты в свободном доступе (через Интернет), я не хочу каждый раз поставлять среды выполнения VC ++ и платформу .NET (я не могу связать их непосредственно в моем установщике / исполняемом файле, это запрещено Microsoft ). Вы знаете, несколько мегабайт времени выполнения для выполнения килобайт кода - это глупо. Для VC ++ 6.0 нужен только ваш исполняемый файл и в лучшем случае 2 .DLL.
Кроме того, среды выполнения отладки не могут распространяться с VC ++ .NET, что не очень хорошо, когда у меня есть клиент, которому нужно выполнить некоторую отладку моих продуктов :)
На мой взгляд, есть основные причины, по которым я все еще использую VC ++ 6.0, но сама IDE уродлива (то есть: нет поддержки табуляции). Обычно я обхожу ограничения IDE, используя вместо них кодовые блоки (CodeBlocks поддерживает CL.