【问题标题】:Issue in Visual Studio 2012 release buildVisual Studio 2012 发行版中的问题
【发布时间】:2013-11-22 12:00:57
【问题描述】:

我有一个在 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 中运行良好。 我不知道我们必须设置或取消设置哪些标志(可能是优化标志)才能让我的程序在发布模式下工作。
请给我一个解决方案

【问题讨论】:

    标签: c++ visual-studio-2012 windows-8


    【解决方案1】:

    你所做的是,基本上

    char* iter = iter;
    

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

    【讨论】:

    • 嘿,我很抱歉,实际上我必须添加一行。当它崩溃时,它会给出一个错误,如“访问冲突写入位置”。实际上这个程序在 vc9 和 vc10 发布模式下运行良好,但我不知道为什么它在 windows 8 的 vc11 发布模式下失败。
    • @user3021329 因为未定义的行为。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-07
    相关资源
    最近更新 更多