我有一个在debug build中运行良好的程序,但是当我在release build中运行该程序时,我的程序在以下行崩溃

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

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


我对ALIGN有如下预处理器定义

指向long的指针的类型转换。

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

       : (__int64)ptr)


当我在Windows 8中的Visual Studio 2012中运行此程序时,它只会出现问题,但在Windows 7中的Visual Studio 2012中可以正常工作。
我不知道我们的程序在发布模式下必须设置或取消设置的标志(可能是优化标志)。
请给我建议一个解决方案

最佳答案

基本上你在做什么

char* iter = iter;


如果将变量iter声明为局部变量,则其内容将是不确定的,并且使用该值将导致未定义的行为。这包括使用该值进行初始化。

关于c++ - Visual Studio 2012发行版中的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20144435/

10-17 00:53