求教一个fortran问题

f
ftmit
楼主 (未名空间)

求教大家一个fortran问题,麻烦各位大侠看看哪里出问题了?先谢谢了。

do i = 1, 300
........
........
........
enddo

[1],使用gfortran xxx.f -o xxx编辑通过,没有报错。

[2],当i小于13时(i=1,13),程序通过,没有任何问题

[3],当i大于14时(i=1,14),程序报错如下:

Program received signal SIGSEGV: Segmentation fault - invalid memory
reference.

Backtrace for this error:
#0 0x7f4831395d3a
#1 0x7f4831394ed5
#2 0x7f48311c920f
#3 0x555e43529a4b
#4 0x555e4352a6b8
#5 0x7f48311aa0b2
#6 0x555e4352811d
#7 0xffffffffffffffff
Segmentation fault (core dumped)

先谢谢各位大侠了。

z
zeami

叔帮你顶。
晕死,这都几个月了还在忙大老板的fortran。。

【 在 ftmit (八戒) 的大作中提到: 】
: 求教大家一个fortran问题,麻烦各位大侠看看哪里出问题了?先谢谢了。
: do i = 1, 300
: ........
: ........
: ........
: enddo
: [1],使用gfortran xxx.f -o xxx编辑通过,没有报错。
: [2],当i小于13时(i=1,13),程序通过,没有任何问题
: [3],当i大于14时(i=1,14),程序报错如下:
: Program received signal SIGSEGV: Segmentation fault - invalid memory
: ...................

z
zeami

FORTRAN 77那本书读过了嘛?

【 在 zeami (贼阿米) 的大作中提到: 】
: 叔帮你顶。
: 晕死,这都几个月了还在忙大老板的fortran。。

f
ftmit

没法子啊,大老板给的原始code就是纯fortran写的,这么古老的东西,我也是彻底服
了。再加上我本身是折腾实验出身的,根本就没有搞过这些建模的鬼咚咚,现学现卖,一步一个跟头,郁闷!

【 在 zeami (贼阿米) 的大作中提到: 】
: 叔帮你顶。
: 晕死,这都几个月了还在忙大老板的fortran。。

z
zeami

大老板居然无所谓发贴早晚。这必须服气啊

【 在 ftmit (八戒) 的大作中提到: 】
: 没法子啊,大老板给的原始code就是纯fortran写的,这么古老的东西,我也是彻底服
: 了。再加上我本身是折腾实验出身的,根本就没有搞过这些建模的鬼咚咚,现学现卖,
: 一步一个跟头,郁闷!

f
ftmit

菌版那边zhetian (叶凡)给我回复说是典型的越界,我正在查循环体,这个循环体太大了,关联的数组也很多,查吧,还能怎么办,

发信人: ftmit (八戒), 信区: Military
标 题: Re: 求教一个fortran问题 (转载)
发信站: BBS 未名空间站 (Fri May 7 14:44:23 2021, 美东)

多谢大侠指点迷津!我查看一下循环体去。

【 在 zhetian (叶凡) 的大作中提到: 】
: 典型的越界。
: 你这省略的代码里,估计有什么array之类的,长度根本不在13之上,你错误的声明了
: array[14],所以index超过13就越界了。
【 在 zeami (贼阿米) 的大作中提到: 】
: FORTRAN 77那本书读过了嘛?

z
zeami

之前说过的awk试过嘛?几千个数据随便处理了不超过一小时

【 在 ftmit (八戒) 的大作中提到: 】
: 菌版那边zhetian (叶凡)给我回复说是典型的越界,我正在查循环体,这个循环体太大
: 了,关联的数组也很多,查吧,还能怎么办,
: 发信人: ftmit (八戒), 信区: Military
: 标 题: Re: 求教一个fortran问题 (转载)
: 发信站: BBS 未名空间站 (Fri May 7 14:44:23 2021, 美东)
: 多谢大侠指点迷津!我查看一下循环体去。

z
zeami

数年前写过fortran。也不是在fortran里写循环处理数据
外挂文件写,就是先改过参数然后反复调同一个fortran

【 在 zeami (贼阿米) 的大作中提到: 】
: 之前说过的awk试过嘛?几千个数据随便处理了不超过一小时

f
ftmit

阿米,问你个事。

你有没有办法让fortran直接读取excel里的数据?每次都要从excel中把数据copy到记
事本里做输入文件,太麻烦了。

先谢谢啊。

【 在 zeami (贼阿米) 的大作中提到: 】
: 数年前写过fortran。也不是在fortran里写循环处理数据
: 外挂文件写,就是先改过参数然后反复调同一个fortran

z
zeami

excel可以存成txt啊,之前说的awk处理txt分分钟
我调过的fortran源码都是机密,没法改
所以都是自己在外部改好参数后重新同一方式调用

【 在 ftmit (八戒) 的大作中提到: 】
: 阿米,问你个事。
: 你有没有办法让fortran直接读取excel里的数据?每次都要从excel中把数据copy到记
: 事本里做输入文件,太麻烦了。
: 先谢谢啊。

f
ftmit

我的意思是直接把excel做为输入文件,不用经过中间txt 的那个过程,能搞定不?

【 在 zeami(贼阿米) 的大作中提到: 】

: excel可以存成txt啊,之前说的awk处理txt分分钟

: 我调过的fortran源码都是机密,没法改

: 所以都是自己在外部改好参数后重新同一方式调用

z
zeami

excel完全可以先用matlab重新写过
你最早问的问题很清晰,不用matlab重新写就能用
现在发展成什么样的数据了?还是有列的数据嘛?

【 在 ftmit (八戒) 的大作中提到: 】
: 我的意思是直接把excel做为输入文件,不用经过中间txt 的那个过程,能搞定不?
:
: excel可以存成txt啊,之前说的awk处理txt分分钟
:
: 我调过的fortran源码都是机密,没法改
:
: 所以都是自己在外部改好参数后重新同一方式调用
:

z
zeami

用蟒蛇也能重新写过

【 在 zeami (贼阿米) 的大作中提到: 】
: excel完全可以先用matlab重新写过
: 你最早问的问题很清晰,不用matlab重新写就能用
: 现在发展成什么样的数据了?还是有列的数据嘛?

H
Huangchong

你可以拿python写个脚本 把Excel批量转成csv csv 本质就是文本 这样fortran
可以直接读

fortran本身不适合拿来搞读Excel这种事情

【 在 ftmit (八戒) 的大作中提到: 】
: 我的意思是直接把excel做为输入文件,不用经过中间txt 的那个过程,能搞定不?
: : excel可以存成txt啊,之前说的awk处理txt分分钟
: : 我调过的fortran源码都是机密,没法改
: : 所以都是自己在外部改好参数后重新同一方式调用
:

p
pinfish

循环里调用i指向数组什么的地方查查
没实际程序这能问出个鬼...
m
mb1

主要代码都在省略号里,怎么帮你查问题?

【 在 ftmit (八戒) 的大作中提到: 】
: 求教大家一个fortran问题,麻烦各位大侠看看哪里出问题了?先谢谢了。
:
: do i = 1, 300
: ........
: ........
: ........
: enddo
:
: [1],使用gfortran xxx.f -o xxx编辑通过,没有报错。
:
: [2],当i小于13时(i=1,13),程序通过,没有任何问题
:
: [3],当i大于14时(i=1,14),程序报错如下:
:
: Program received signal SIGSEGV: Segmentation fault - invalid memory
: reference.
:
: Backtrace for this error:
: #0 0x7f4831395d3a
: #1 0x7f4831394ed5
: #2 0x7f48311c920f
: #3 0x555e43529a4b
: #4 0x555e4352a6b8
: #5 0x7f48311aa0b2
: #6 0x555e4352811d
: #7 0xffffffffffffffff
: Segmentation fault (core dumped)
:
: 先谢谢各位大侠了。
d
daemonself

你这个问题和fortran有什么关系?你写成C就不会segment fault了?
test很容易,不要动不动就用debugger。试一下i=14不会出segment fault
【 在 ftmit (八戒) 的大作中提到: 】
: 求教大家一个fortran问题,麻烦各位大侠看看哪里出问题了?先谢谢了。
: do i = 1, 300
: ........
: ........
: ........
: enddo
: [1],使用gfortran xxx.f -o xxx编辑通过,没有报错。
: [2],当i小于13时(i=1,13),程序通过,没有任何问题
: [3],当i大于14时(i=1,14),程序报错如下:
: Program received signal SIGSEGV: Segmentation fault - invalid memory
: ...................

m
maynot

运行一下 ulimit 看能不能过
d
daemonself

ulimit也是一个思路,或者换intel complier
【 在 maynot (猫冬) 的大作中提到: 】
: 运行一下 ulimit 看能不能过

n
nobrain

应该是当i大于14时,有的数组出现了越界,好好查一下