不懂就问,为什么cpp使用了new之后再使用delete会报错?

图片说明
main结束的时候没加delete[] BOOL;
可以正常运行;
但是,后面我加上了之后,
图片说明
继续运行,就出现了报错图片说明
这是为什么啊?
我仅仅这样写

#include<iostream>
using namespace std;
int main()
{
      int *BOOL=new int;
    BOOL[0] = 1, BOOL[1] = 1, BOOL[2] = 1, BOOL[3] = 1, BOOL[4] = 1, BOOL[5] = 1;
      delete[] BOOL;
      return 0;
}

也是报错
图片说明

bool *BOOL = new int

BOOL[0] = 1, BOOL[1] = 1, BOOL[2] = 1, BOOL[3] = 1, BOOL[4] = 1, BOOL[5] = 1;
只new了一个int的内存,后续使用了6个int,使用了未申请的内存,程序行为不可预知。

要修改正确很简单:
int *BOOL = new int[6];//你总共用了6个元素。
...
delete[] BOOL;

我按照你写的 在qt下跑了一遍没啥问题 。
你不删除正常运行只能说名你分配没问题

内存泄漏了
删除出问题就是你删除那部分存在问题。

应该是内存泄露了吧,仔细看下代码

int n;
n = 。。。。。。
。。。。。。。
bool *BOOL = new int[n];

你可已通过的你的代码段设置n,但是你不能没有n,让程序自己猜你想要几个。
如果你想,随后开能添加或减少个数,个数不是个固定的长度。你可以用链表或者vector,或者map