另一个学生问我他的 C 代码有什么问题。我成功地重现了错误的行为,并且完全不知道为什么会出现段错误。考虑这个小小的 C 程序:
#include <stdio.h>
int main(void) {
int N = 590;
double A[N][N];
double B[N][N];
double C[N][N];
printf("done");
}
- Set
N
为 运行时不会出现错误,无论有没有输出。
- set
N
to a value > 590:
- 移除输出线后运行完美。
- 编译并运行并输出:分段故障
这是什么原因呢?有人能解释一下吗?
您的应用程序可用的堆栈量非常依赖于系统,并且自动变量(例如双精度数组)会消耗堆栈空间。调用函数需要额外的堆栈空间(用于其变量以及保存的寄存器和返回点等内务处理)。您将离开堆栈末尾并尝试访问您被禁止访问的内存。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)