我正在写一个C程序。在第一行,我有

typedef float m_elem[NMAX][NMAX][3];
m_elem asa_m;
m_elem asa_mi[100];

然后,进行一些计算现在,对于每次运行,根据输入,我在代码中更改NMAX值,然后重新编译并运行它。对于低于500的NMAX值,程序运行正常,但对于更高的NMAX值(我需要一些输入文件),我得到的只是分段错误。
你建议我在这里做什么我读过关于学习valgrind的文章,但在这种情况下,我想知道仅仅改变编译选项以允许程序处理更大的矩阵是否有帮助
谢谢

最佳答案

你的堆栈空间可能用完了。
在NMAX=500时,asa_mi变量将需要500*500*3*100*4字节,或大约300 MB。大多数操作系统不允许这么大的堆栈,所以您可能需要检查系统的限制。
你试过用malloc()从堆中分配它吗?

关于c - 增加阵列大小时出现段错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3617654/

10-11 15:21