2013-11-22 5 views
0

У меня есть программа, которая работает хорошо в отладочных, но когда я запускаю же с выпуском строить свои программы аварии на ниже линиивыпуск в Visual Studio 2012 релиз сборки

char* iter=ptr; //ptr is already initialized 

char* iter = (char*) ALIGN (iter); // crashes here 

У меня есть определение препроцессора, как показано ниже для ALIGN

Тип-литье указателей в длину.

#define SIZE  8L 
#define ALIGN(ptr) \ 
    (((__int64)ptr & (~(SIZE - 1L))) + SIZE) \ 

     : (__int64)ptr) 

Это дает только проблема, когда я запустить эту программу в Visual Studio 2012 в Windows 8, но отлично работает с Visual Studio 2012 в Windows 7. Я не знаю, какие флаги (возможно, флаги оптимизации), мы должны установить или отключить, чтобы моя программа работала в режиме деблокирования.
Пожалуйста, предложите мне решение

ответ

5

Что вы делаете, в основном

char* iter = iter; 

Если переменная iter объявлена ​​как локальная переменная, то его содержимое будет неопределенным, и с помощью этого значения приведет к неопределенное поведение. Это включает в себя использование этого значения для инициализации.

+0

Эй, мои извинения, На самом деле я должен добавить одну строку. И когда он выходит из строя, он дает ошибку, например «Место для записи нарушения прав доступа». На самом деле эта программа отлично работает в режимах выпуска vc9 и vc10, но я не знаю, почему она не работает в режиме выпуска vc11 в Windows 8. –

+0

@ user3021329 Потому что неопределенное поведение. –

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