C++ 内存所有位置wxWidgets

C++ 内存所有位置wxWidgets,c++,wxwidgets,C++,Wxwidgets,我试图在我的应用程序中进行动态内存分配。如果我试图在OnInit()中分配memroy,那么应用程序就会崩溃 目前,我正在Visual Studio 2010中使用wxWidgets 3.0.4的最新稳定版本 如果我注释#define BUFFER,应用程序将按预期工作 我的主要意见是: #include <wx/wx.h> class MyApp : public wxApp { public: virtual bool OnInit(); }; cla

我试图在我的应用程序中进行动态内存分配。如果我试图在
OnInit()
中分配memroy,那么应用程序就会崩溃

目前,我正在Visual Studio 2010中使用wxWidgets 3.0.4的最新稳定版本

如果我注释
#define BUFFER
,应用程序将按预期工作

我的主要意见是:

#include <wx/wx.h>

class MyApp : public wxApp {
    public:
        virtual bool OnInit();
};

class MainWindow : public wxFrame {
    public:
        MainWindow(const wxPoint& position, const wxSize& size);
        ~MainWindow();

    private:
        void setupUi();

        int *buffer0;
};

两者之间有区别

buffer0 = new int(1000); // allocate sizeof(int) bytes

您的程序有未定义的行为,因为您分配了
sizeof(int)
字节,但是

memset(buffer0,0,10*sizeof(int))

您希望将
sizeof(int)*10
字节设置为0。您正在访问您无权访问的内存。
使用方括号创建数组
新的int[1000]

之间存在差异

buffer0 = new int(1000); // allocate sizeof(int) bytes

您的程序有未定义的行为,因为您分配了
sizeof(int)
字节,但是

memset(buffer0,0,10*sizeof(int))

您希望将
sizeof(int)*10
字节设置为0。您正在访问您无权访问的内存。 使用方括号创建数组
新int[1000]

buffer0 = new int(1000);
您为1分配内存(大写:1)
int
,并用
10000
初始化它。然后

memset(buffer0, 0, 10 * sizeof(int));
10*sizeof(int)
buffer
开始的字节设置为零。你访问的内存不是你的

既然您在析构函数中使用了
delete[]
,我想您是想编写

buffer0 = new int[1000];
甚至

buffer0 = new int[1000]{};
用零初始化
int
s,而不必使用
memset()


真正的答案是: 使用

std::vector buffer0(1000);
带有

您为1分配内存(大写:1)
int
,并用
10000
初始化它。然后

memset(buffer0, 0, 10 * sizeof(int));
10*sizeof(int)
buffer
开始的字节设置为零。你访问的内存不是你的

既然您在析构函数中使用了
delete[]
,我想您是想编写

buffer0 = new int[1000];
甚至

buffer0 = new int[1000]{};
用零初始化
int
s,而不必使用
memset()


真正的答案是: 使用

std::vector buffer0(1000);

考虑
int x(10)之间的差异
intx[10]
。请参阅…,
intbuffer0=newint(100)
意味着创建一个指向指针的变量,其值为100<代码> int Buffe0= new int(100)< /COD>另一方面意味着创建一个100字节分配给它的数组/指针…考虑<代码> int x(10)之间的差异;代码>和
intx[10]
。请参阅…,
intbuffer0=newint(100)
意味着创建一个指向指针的变量,其值为100<另一方面,code>int buffer0=new int[100]
意味着创建一个分配了100字节的数组/指针……感谢您的快速回答,从长远来看,我使用了错误的括号,您(仍然)使用了错误的数据类型;p感谢您的快速回答,我使用了错误的括号。从长远来看,您(仍然)使用了错误的数据类型;P