内存所有位置 wxWidgets
memory alllocation wxWidgets
我试图在我的应用程序中有一个动态内存分配。如果我尝试在OnInit()
中分配内存,则应用程序崩溃。
目前,我正在使用wxWidgets 3.0.4的最新稳定版本和Visual Studio 2010。
如果我#define BUFFER
发表评论,则应用程序按预期工作。
我的主要.h:
#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;
};
主.cpp
#include "main.h"
#define BUFFER
IMPLEMENT_APP(MyApp)
//-----------------------------------------------------------------------------
bool MyApp::OnInit() {
MainWindow *main = new MainWindow(wxPoint(20, 20), wxSize(300, 200));
main->Show(true);
return true;
}
//----------------------------------------------------------------------------
MainWindow::MainWindow(const wxPoint& position, const wxSize& size) : wxFrame(NULL, wxID_ANY, "Frame") {
setupUi();
#ifdef BUFFER
buffer0 = new int(1000);
memset(buffer0, 0, 10 * sizeof(int));
#endif
}
//----------------------------------------------------------------------------
MainWindow::~MainWindow() {
#ifdef BUFFER
delete[] buffer0;
#endif
}
//----------------------------------------------------------------------------
void MainWindow::setupUi() {
wxBoxSizer *bsMain = new wxBoxSizer(wxVERTICAL);
wxStaticBox *sbInfo = new wxStaticBox(this, wxID_ANY, "INFORMATION");
bsMain->Add(sbInfo, 1, wxALL | wxEXPAND, 15);
SetSizer(bsMain);
}
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
初始化为零,而不必使用memset()
。
真实(tm(答案:
用
std::vector<int> buffer0(1000);
两者之间有区别
buffer0 = new int(1000); // allocate sizeof(int) bytes
和
buffer0 = new int[1000]; // allocate sizeof(int) * 1000 bytes
您的程序具有未定义的行为,因为您分配了sizeof(int)
字节,但
memset(buffer0, 0, 10 * sizeof(int));
您希望将sizeof(int) * 10
字节设置为 0。您正在访问您无权访问的内存。 使用方括号创建数组new int[1000]
。
相关文章:
- 将值指定给向量(2D)的向量中的某个位置
- 使用Unreal C++获取VR耳机的世界位置/方向
- 写入位置0x0000000C时发生访问冲突
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- GL_SHADERSTORAGE_BUFFER位置是否与其他着色器位置冲突
- 如何使用cudaMallocManaged在指针位置初始化对象?(C++)
- 无法获取webot::PositionSensor对象中位置传感器的值
- 非常量变量只读位置的赋值
- 如何定义更改car类中car位置的方法
- 使用迭代器时如何访问对象在向量中的位置?
- 更改.cpp程序的输入文件中数据的位置会意外更改输出
- 求最大元素位置的分治算法
- 什么是事件表 (wxWidgets)?
- 你好。。。id_public变量不应该给出结果为 81 和 86 吗?为什么它为两个派生类占用不同的内存位置?
- 为什么我的点没有在 OpenGL 中绘制鼠标所在的位置?
- 如何将元素添加到向量的字符串位置
- 如何选择在 csv 文件中输出的位置
- 无法打开 fstream C++文件,即使它与 .cpp 位于同一位置
- 如何在特定位置追加 json 文件
- 内存所有位置 wxWidgets