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