删除指针出现断言错误我写的一个冒泡排序,当我去掉注释(delete p1和delete p2)之后,就出现断言错误:_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)这是为什么呀?#include using namespace std;void Swap(int *p1,int *p2);int
来源:学生作业帮助网 编辑:作业帮 时间:2024/11/09 10:27:11
删除指针出现断言错误我写的一个冒泡排序,当我去掉注释(delete p1和delete p2)之后,就出现断言错误:_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)这是为什么呀?#include using namespace std;void Swap(int *p1,int *p2);int
删除指针出现断言错误
我写的一个冒泡排序,当我去掉注释(delete p1和delete p2)之后,就出现断言错误:_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)这是为什么呀?
#include
using namespace std;
void Swap(int *p1,int *p2);
int main()
{
const int maxnumbers=5;
int Bubble[maxnumbers];
int i=0,j=0;
for(i=0;i
删除指针出现断言错误我写的一个冒泡排序,当我去掉注释(delete p1和delete p2)之后,就出现断言错误:_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)这是为什么呀?#include using namespace std;void Swap(int *p1,int *p2);int
可能是编译器的原因,在VS 2005里面,new和delete必须严格匹配.你在申请了内存之后,移动了指针,因此,指针所指的位置和最初已经不同,不能delete.
看下面的代码:
#include
using namespace std;
int main()
{
int a[2]={1,2};
int *p=new int;
p=&a[0];
// delete p;
p=0;
return 0;
}
在最初分配的时候,我机器上,p指向的地址是0x003a6018,而a的地址是0x0013ff57,而delete只能释放位于0x003a6018的内存.
注释掉p=&a[0];之后,delete就没有问题了.