gpt4 book ai didi

c++ - _Block_Type_Is_Valid (pHead->nBlockUse) 删除堆栈内存?

转载 作者:行者123 更新时间:2023-11-28 02:47:34 25 4
gpt4 key购买 nike

<分区>

我知道这是一个常见错误,所以我尝试创建一个最小示例。我认为这是因为我试图释放堆栈内存,但我不太明白如何做不同的事情。

迷宫.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;从析构函数中,不再有错误。

这里到底发生了什么?

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com