zoukankan      html  css  js  c++  java
  • Windows上x86程序正常但x64程序崩溃问题

    先看下面代码:

    #include <stdio.h>
    #include <windows.h>
    #include <memory>
    
    class Test
    {
    public:
        Test(int i)
            :a(i)
        {
        }
    
        ~Test()
        {
        }
    
    public:
        void Print()
        {
            printf("a=%d
    ", a);
        }
    
    private:
        int a;
    };
    
    int main()
    {
        std::shared_ptr<Test> aa(new Test(6));
        aa->Print();
    
        wprintf(L"Test* size: %d
    ", sizeof(Test*));
        wprintf(L"ULONG size: %d
    ", sizeof(ULONG));
        ULONG data = (ULONGLONG)aa.get();
        ((Test*)data)->Print();
    }

    x86环境下,运行正常(输出如下):

    a=6
    Test* size: 4
    ULONG size: 4
    a=6

    但如果编译x64的程序后运行,这里就有问题了:

     a=6

    Test* size: 8
    ULONG size: 4

    ----------------------------> Crash.

     

    这里其实从打印出的size来看,很明显这两个size不一致导致, 指针在x64位环境下为8字节,而在x86环境下只有4字节(通常)。

    因此如果程序要想同时可以在x86及x64环境下运行,需要考虑这一点。

  • 相关阅读:
    tomcat常见报错解决方法汇总
    C++中socket编程
    Winsock解析
    等价类划分的原则
    在线编译器
    条件覆盖,路径覆盖,语句覆盖,分支覆盖解释
    并发测试
    针对C程序员的 C++
    缸中之脑
    什么是薛定谔的猫
  • 原文地址:https://www.cnblogs.com/kernel0815/p/5125971.html
Copyright © 2011-2022 走看看