修改参数时出现Fortran总线错误
每当我为参数分配新值时,都会收到总线错误。我不明白我是如何指向不存在的记忆的。我应该有权访问该地址,因为它是在参数列表中声明的,除非 Fortran 不允许在没有某些特殊声明的情况下修改参数。我的其余代码可以正常工作,没有错误。我把它简单地分为这个任务。
我正在 OS X 的终端上运行 gfortran (不确定是哪个版本,临时的)。
SUBROUTINE p_list (c_number, c_matrix)
INTEGER c_number
INTEGER c_matrix(8000,20)
! ...
c_number = 1000
! ...
END SUBROUTINE p_list
Whenever I assign a new value to a parameter, I get a bus error. I don't see how I'm pointing to non-existant memory. I should have access to this address, as it is declared in the parameter list, unless Fortran does not allow parameters to be modified without some special declaration. The rest of my code works without error. I've isolated it to simply this assignment.
I'm running gfortran (not sure which version, off-hand) from the terminal in OS X.
SUBROUTINE p_list (c_number, c_matrix)
INTEGER c_number
INTEGER c_matrix(8000,20)
! ...
c_number = 1000
! ...
END SUBROUTINE p_list
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
你怎么称呼这个?我不了解现代的 FORTRAN,但我知道使用早期版本的 FORTRAN,您可能会通过传入常量(例如,通过调用 p_list(0, my_matrix))来使程序崩溃。这是因为 FORTRAN 通过引用隐式传递所有内容,包括常量(!)
How are you calling this? I don't know modern FORTRANs, but I know that with earlier versions of FORTRAN, you could crash a program like that by passing in a constant (e.g., by calling p_list(0, my_matrix)). That's because FORTRAN implicitly passed everything by reference, including constants (!)