c/c++ stack pointer is not in a rw map; likely due to stack overflow

最近在做一个专项是出现了一个困扰了我很久的一个问题,一直出一个高概率的crash,通过加log等定位,在进入一个函数的第一行打印log时就报错,通过解析对应的db文件看到了一上面的一个报错提示“c/c++ stack pointer is not in a rw map; likely due to stack overflow”,通过检索才知道报 stack overflow的原因,是因为我在此函数体中申请了一个char a[size]的形式申请了一个2M大小的栈内存导致了栈溢出,后续通过char *p =new[size]的形式来申请堆内存将问题解决;不过要记住自己new出的内存的需要手动释放掉哦,通过delete[] a的形式;

通过此次的教训,和资料查询,代码中出现stack overflow的报错常见的主要就就是2种形式:
一种是函数体是一个递归调用;例如快速排序中递归函数调用过多,每次递归调用中为变量申请的栈内存都不会立刻释放掉,要一直等到程序运行结束后,所有栈内存中变量空间才会释放掉。这样积累下导致程序的栈内存空间不够,就会报错;
另外一种就是我本次出现的问题的情况**,在函数中定义了一个较大的数组或者别的变量。** 在Windows下,栈是向低地址扩展的数据结构,是一块连续的内存的区域。这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的,在 WINDOWS下,栈的大小是2M(也有的说是1M,总之是一个编译时就确定的常数),如果申请的空间超过栈的剩余空间时,将提示overflow

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值