我有一个在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/