C ++ Visual Studio 2013 - Windows Phone(访问冲突错误)

时间:2015-04-12 20:26:44

标签: visual-studio-2013 windows-phone-8.1 c++-cli

我遇到了一个大问题,遗憾的是我无法解决问题。我已将以下课程添加到我的项目中:

ref class NavigationContext sealed
{
private:
    int combobox1;
    int combobox2;
    int combobox3;



public:
    NavigationContext();



public:
    int rcombobox_1() {
        return combobox1;
    }

};

NavigationContext^ StaticData;

关键是当我尝试调用" int rcombobox_1()"时出现访问冲突错误。功能。为什么?有没有其他方法可以从私有变量中检索数据?

我不得不修改你的代码,因为它不想编译。现在它看起来像是:

    ref class NavigationContext sealed
{
private:
    int combobox1;
    int combobox2;
    int combobox3;



private:
    NavigationContext();
    NavigationContext(const NavigationContext^);
    NavigationContext^ operator=(const NavigationContext^);


public:


    static NavigationContext^ instance() {
        static NavigationContext^ theInstance;
        return theInstance;

    }



    int rcombobox_1() {
        return combobox1;
    }

};

...我使用了您的来电线路,但它仍然无法正常工作。 "&安培;"标志在我的IDE中无效,我将其更改为^,但我不知道这是否正确。

错误消息:" Losowanie Lotto.exe中0x00C99331的第一次机会异常:0xC0000005:访问冲突读取位置0x00000010。

如果存在此异常的处理程序,则可以安全地继续该程序。"

最终我找到了解决方案。必须使用line:

创建对象的实例
NavigationContext^ StaticData = ref new NavigationContext();

1 个答案:

答案 0 :(得分:0)

  

"重点是当我尝试调用int rcombobox_1()函数时出现访问冲突错误。为什么"

您正在取消引用未指定给NavigationContext的有效实例的指针。

  

"还有其他方法可以从私有变量中检索数据吗?"

我与你的getter函数没什么关系,这没关系。


至于评论

  

"你在哪里为这个指针分配内存?"

     

"抱歉,我是初学者。我怎样才能做到这一点? "

看起来你想拥有像单身人士这样的东西,而不是全局(未初始化)指针:

ref class NavigationContext sealed {
private:
    int combobox1;
    int combobox2;
    int combobox3;

    NavigationContext();
    NavigationContext(const NavigationContext&);
    NavigationContext& operator=(const NavigationContext&);

public:
    static NavigationContext& instance() {
        static NavigationContext theInstance; // <<< This statement 
                                              //     allocates the
                                              //     memory.
        return theInstance;
    }
    int rcombobox_1() {
        return combobox1;
    }

};

来电语法:

int rcCombo1 = NavigationContext::instance().rcombobox_1();

可能还有其他解决方案标记为,具体考虑了垃圾收集机制。