首页 > 试题广场 >

什么情况下会栈溢出?如何避免?

[问答题]
什么情况下会栈溢出?如何避免?
情况:1.局部数组过大;2.递归调用层次过多;3.指针或数组越界。 避免:目的:使用更大的空间。1.增大栈的空间;2.使用堆。(动态分配)
发表于 2022-10-01 11:38:42 回复(0)
程序中局部变量太多了;局部数组的元素数量过大了;当有递归调用时,递归级数过多,也会快速消耗内存,导致栈溢出。避免栈溢出的方法实际上就两种。无外乎是栈内存设小了,自动数据多了自然就存不下了,溢出在所难免,所以设置更大的栈内存就可以避免。要么就是直接使用动态内存存储较大的局部变量,不用栈内存了,那也自然不会存在溢出了。 -------------------------------------- 指针或者数组越界通常不会直接导致栈溢出的。这种情况更容易产生的是内存访问错误,也就是segmentation fault。或者是一些未定义行为,又或者是导致数据损坏。反正一般是不会导致栈溢出的。上面的回答我觉得可能有问题。
发表于 2023-08-25 13:39:33 回复(0)
1、局部数组过大 2、递归层次太多 3、指针或者数组越界
编辑于 2024-03-16 15:06:40 回复(0)
1.局部数组过大。当函数内部的数组过大时,有可能导致堆栈溢出。 2.递归调用层次太多。递归函数在运行时会执行压栈操作,当压栈次数太多时,也会导致堆栈溢出。 3.指针或数组越界。这种情况最常见,例如进行字符串拷贝,或处理用户输入等等。 解决这类问题的办法有两个, 一是增大栈空间,二是改用动态分配,使用堆(heap)而不是栈(stack)。
发表于 2023-09-01 17:13:10 回复(0)
1、局部数组过大 2、递归层次太多 3、指针和数组越界 解决:增大栈空间或者改用动态分配
发表于 2023-08-07 15:24:17 回复(0)