求解决:C语言代码能正常编译,但不能计算,为什么?含代码
如题,
两个基本相同的C语言代码,一个能正常运行计算,一个读入定义数组都有问题,但都能正常编译,为什么?
注:
1. 此code2与code1中的区别仅在于后续计算,即在命令注释行‘//以下求出上下界面的velocity’前,两个code没有差异,仅code2中多了一些定义的变量及数组;
2. code1能正常运行,而code2的gdb调试显示与code1中相同的部分都不能正常运行,为什么?且code2中读入文件夹的命令都提示错误,实在无解。
3. 本人因为在学习C语言,gdb调试能力有限,已对code2做了少量调试,并注释了,但对于一些看似正确却提示有问题的,实在不知如何解决,希望大家帮忙运行看一下,给一些指点,谢谢!
4.可能代码写的比较乱,麻烦了。
今日热帖
让我们这些拿手机的怎么看
您好!主要是代码太长了,400多行,难以贴出来,谢谢您!
编译只要语法对就能过,运行要逻辑也正确才行,所以很正常。
话说你的C代码看起来是非常Fortran风格啊,这么多数组都是固定维度大小的。上下行对齐也是乱七八糟不统一,别人看起来很费劲。既然用c了,最好还是按照c的风格和约定俗成来比较好
谢谢您!果然是大神,一眼看出了问题所在,就是数组太大了,听说动态数组(即采用动态内存)可以解决,正在尝试中。另外,我还需要设置一个double a[20][30000][30000]的三维数组,别人告诉我数组太大,可能采用动态数组内存都不够,大神有什么建议没?
我会尽量按照标准来写,现在还在学习中,再次谢谢
,
数组需要的内存用量可以自己算:sizeof (double)=8 bytes, 8*20*30000*30000=144g bytes. 一般电脑的物理内存很少有这么大,可以加交换空间但比内存慢好几个数量级。更好的办法是分析你的问题,看有没有办法不用这么大的数组,比方说有些地方或者时域上变化不大比较平缓就用大步长或者大网格,这个需要domain knowledge,不是同一领域的人很难给出什么建议
还有一种是后面的计算只依赖前面计算好的中间结果,不需要所有以前的数据,所以只要存中间结果就可以,这样就不需要保存前面所有的历史数据,也能省内存
你需要具体问题具体分析,这么大的数组内存得100多G,你的电脑有没有这么大内存?