2013-11-22 131 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中运行这个程序,它只是提供了问题,但工作正常使用Windows 7中的Visual Studio 2012。 我不知道我们必须设置或取消设置我的程序在发布模式下工作的标志(可能是优化标志)。
请建议我一个解决方案

回答

5

你在做什么,基本上

char* iter = iter; 

如果变量iter被声明为一个局部变量,它的内容将是不确定的,并且使用该值将导致未定义的行为。这包括使用该值来初始化它自己。

+0

嘿,我的道歉,其实我要增加一行。当它崩溃时,会出现“访问冲突写入位置”之类的错误。其实这个程序在vc9和vc10发布模式下工作正常,但我不知道为什么它在Windows 8的vc11发布模式下失败。 –

+0

@ user3021329因为未定义的行为。 –