Ann*_*own 5 c stack-overflow segmentation-fault
导致堆栈溢出和获取的一种显而易见的方法Segmentation fault是递归地将堆栈帧推到彼此之上,直到它激增.我想知道堆栈溢出是否可能发生甚至没有推动新的堆栈帧.
创建一个足够大的阵列也可以从经验,但任何其他可能的场景吗?
C99 使用可调整大小的数组,您可以使用该数组并不断将其大小调整为更大的数组。然而,这个可调整大小的数组是使用 实现的alloca。这是UNIX env中的示例代码:
#include <stdio.h>
#include <alloca.h>
#include <stdlib.h>
#include <stdbool.h>
int
main()
{
while (true)
{
void *p = alloca(32UL);
printf("new memory allocated at %p \n", p);
}
exit(EXIT_SUCCESS);
}
Run Code Online (Sandbox Code Playgroud)
你的输出将如下所示
new memory allocated at 0xbf800a60
new memory allocated at 0xbf800a30
new memory allocated at 0xbf800a00
new memory allocated at 0xbf8009d0
new memory allocated at 0xbf8009a0
[1] 3977 segmentation fault ./a.out
Run Code Online (Sandbox Code Playgroud)
alloca属于malloc函数系列,只不过它通过调整堆栈指针在堆栈上分配内存。
| 归档时间: |
|
| 查看次数: |
111 次 |
| 最近记录: |