[踩坑集关于出现debug error: CRT detected that the application wrote to memory after end of heap buffer的一种情形

[踩坑集锦] 出现debug error: CRT detected that the application wrote to memory after end of heap buffer的一种情形

这周编程任务呢,是编写 SeqList类并对其进行测试,然而编写完成之后,通过三个小程序进行测试的时候出了问题。其中第二个小程序是对数据进行冒泡排序,问题也正是出现在这里。

冒泡排序的小程序主函数是这样的:

void bubble_seqlist(SeqList& L);//冒泡排序 函数声明
void display_seqlist(Type* first, Type* last);//输出顺序表 函数声明
int main()
{
 SeqList L;
 int temp;
 cout << "input 10 intergers:\n";
 for (int i = 0; i < 10; i++)
 {
  cin >> temp;
  L.InsertRear(temp);
 }
 bubble_seqlist(L);
 display_seqlist(L.Begin(), L.End());
 
 return 0;
}
void bubble_seqlist(SeqList &L)//(已修改)目测有问题,仅排了前几个数据,但是还没查出来
{
 int i(0), j, last, n = L.Size();//i=0初始化;n表示数据个数
 Type temp;
 while (i < n - 1)//第一层循环:用于 n个数中进行n次排序,确保每个数都排序完成
 {
  last = n - 1;//确定 每次第一层循环 最后一个数据的角标
  for(j=n-1;j>i;j--)//第二层循环:用于 寻找最小数并 排序,确定位置
   if (L[j] < L[j - 1])//寻找两个数中的最小数,并把小数放在前面
   {
    temp = L[j - 1];
    L[j - 1] = L[j];
    L[j] = temp;
    last = j;//找到小数的角标,通过last传给i
             //(即完成一次最小数放最前的操作之后,把最小数去掉,留下剩下的数字中,第一个数字的角标)
   }
  i = last;//确认下次循环 的第一个数据(由于是从后向前比较,故也可看做是最后比较的数据的角标)
 }
}
void display_seqlist(Type* first, Type* last)//顺序表数据输出
{
 for (; first != last; ++first)
  cout << *first << '\t';
 cout << endl;
}

定义SeqList类的时候,默认构造函数使用的是:

SeqList::SeqList()
{
 data = new Type(MAXSIZE);
 size = 0;
}

然后报错。

查找资料发现,这个debug error有两种可能:
1、重复释放空间
2、对数组元素操作时,超出了操作范围,即越界了

经过了多次测试,我确认到我的报错的原因是第一点,即重复释放空间。

为什么呢?

我找了好久,才发现,原来是分配动态空间的时候出了问题,细心的朋友大概已经看出来了,在上面的代码里面,有一处隐秘的格式错误:

data = new Type (MAXSIZE);

而分配动态内存空间的正确格式应该是:

data = new Type [MAXSIZE]

就是括号的区别

改正之后,就不再报错了。

由于一开始的格式错误导致了,一开始内存空间就分配失败了,所以后面的释放过程就报错,因为一开始就没有分配成功,本就没法释放。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值