2013-12-01 2 views
0

Я пишу код, который компилируется, но приложение по какой-то причине не запускается. Я не получаю ошибок компиляции, но когда я пытаюсь запустить его, я получаю сообщение, в котором говорится: «xxx.exe не является допустимым приложением win32». Я запускаю это на машине Windows 7. IDE, которую я использовал, - это Visual Studio 2012. Я не использую какие-либо странные библиотеки; iostream - единственная библиотека, которую я включил. Единственное, что может быть причиной этого, это то, что я использую два очень больших 2-D массива. Они оба 32000x32000, и они имеют тип данных «char». В какой-то момент программа работала нормально, когда у нее был только один из этих массивов. Я действительно не вижу, как добавление второго массива нарушит код, но, возможно, я ошибаюсь. Кроме этого, все это довольно стандартно. Я бы опубликовал код, и я все еще могу, если бы это было полезно, но оно очень длинное и довольно грязное. Дайте мне знать, если у вас есть мысли. Еще одна вещь, я пробовал это на двух отдельных компьютерах, и никто не работал. Оба были под управлением Windows 7 64-бит. Большое спасибо.Windows 7 «недействительная ошибка приложения win32» в Visual Studio 2012

+1

'но это очень длинный и довольно грязный' Это означает, что вы не сделали небольшой _testcase_, чтобы воспроизвести проблему, и, соответственно, вы еще не закончили свою личную отладку. Дайте нам знать, как это происходит. –

+0

Убедитесь, что он действительно компилируется. Прочитайте вывод при его создании, убедитесь, что файл '* .cpp', который вы создали, выполняется. Вы всегда можете создать новый проект и скопировать код и посмотреть, произойдет ли одно и то же. – Caesar

+0

Я обнаружил, что это не проблема с кодом. Я пробовал комментировать каждую строку кода так, чтобы она была оператором include, с использованием пространства имен std и пустой основной функции. Это все равно не сработает. Я предполагаю, что в VS 2012 есть некоторые настройки, которые мне нужно изменить. Есть идеи? – user3047641

ответ

1

Ваши массивы на самом деле слишком большие. Существуют ограничения на объем данных, которые может иметь приложение Win32, даже если это 64-разрядное приложение.

От http://software.intel.com/en-us/articles/memory-limits-applications-windows

32-битном

Static data - 2GB 

... 

64-битном

Static data - 2GB 

... 

Обратите внимание, что ограничение на статических и стека данных одинакова в обоих 32-битной и 64-битные варианты. Это связано с форматом файла файла Windows Exercial Executable (PE) Windows , который используется для описания EXE и DLL, как указано компоновщиком. Он имеет 32-битные поля для разделов изображения смещения и длины и не был расширен для 64-битных вариантов Windows. Как и в 32-битной Windows, статические данные и стек имеют одинаковые первые 2 ГБ адресного пространства.

+0

Большое спасибо. Я должен внести несколько изменений, но это должно решить! – user3047641

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