堆栈被破坏问题

我们在平时写代码时经常遇见堆栈破环的情况,总结我自己在做题时遇到的情况,在此整理一下:

首先,什么是堆栈被破坏

堆栈被破坏通常指的是程序执行时访问了已经被释放或不存在的内存地址,从而导致程序崩溃或异

常退出。

#include<iostream>
#include<cstring>
using namespace std;
int main()
{
    int i, j, t;
    int a[10] = {3,6,2,5,9,7,8,0,1,4};
    for ( i = 0; i < 10; i++)
    {
        for ( j = 0; j < 10 - i; j++)
        {
            if (a[j] > a[j + 1])
            {
                t = a[j+1];
                a[j + 1] = a[j];
                a[j] = t;
            }
        }
    }
    for (int i = 0; i < 10; i++)
    {
        cout << a[i]<<' ';
    }

    return 0;
}

如上面这个例子,是一个简单的冒泡排序,也是我经常发生的错误 

错误原因是将冒泡排序中j的循环判断条件写错了应该是j < 10 - i - 1(这里的n一般是数组的长度)

若为j < 10 - i;

就会导致在第一轮排序时,p[9]与p[10]进行比较,但是根本不存在p[10]这个变量,访问不存在的地址,自然是非法操作,会导致程序崩溃,崩溃原因就是“堆栈被破坏”。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值