<分区>
我知道这是一个常见错误,所以我尝试创建一个最小示例。我认为这是因为我试图释放堆栈内存,但我不太明白如何做不同的事情。
迷宫.h
#pragma once
class Maze
{
public:
Maze();
Maze(unsigned int height, unsigned int width);
~Maze();
private:
unsigned int m_height;
unsigned int m_width;
char *entrance;
char *exit;
char *m_cells;
};
迷宫.cpp
#include "Maze.h"
using namespace std;
Maze::Maze()
{
}
Maze::Maze(unsigned int height, unsigned int width) :
m_height(height),
m_width(width)
{
m_cells = new char[m_height * m_width];
entrance = nullptr;
exit = nullptr;
}
Maze::~Maze()
{
delete entrance;
delete exit;
delete[] m_cells; //this line causes the error
}
导致错误的main.cpp
#include <iostream>
#include <string>
#include "Maze.h"
using namespace std;
int __cdecl main(int argc, char **argv)
{
Maze maze;
maze = Maze(10, 10);
}
没有错误的main.cpp
#include <iostream>
#include <string>
#include "Maze.h"
using namespace std;
int __cdecl main(int argc, char **argv)
{
Maze maze(10, 10);
}
这两种电源有什么区别?为什么第一个会导致错误?这是一个问题,因为我想声明迷宫但稍后在我的程序中初始化它。在这里我只用两行来创建一个最小的例子。
错误发生在程序关闭时,所以我认为这是一个内存释放问题。确实,当我删除 删除[] m_cells; 从析构函数中,不再有错误。
这里到底发生了什么?