fortran - 在do循环中相互分配相同变量时的段错误
问题描述
我们正在开发一个在 Fortran 中对 URL 进行编码的函数。
urlencode_one_Text
包含字符串的十进制值并将其作为 url 编码返回
错误是Program received signal SIGSEGV: Segmentation fault - invalid memory reference
。
这不是编译错误,而是运行时错误。有没有办法解决这个错误?
我盯着第 22 行,代码看起来写得正确。我想将 x 除以 16,但我不能。
环境:windows 10,GNU Fortran(x86_64-posix-seh-rev0,由 MinGW-W64 项目构建)8.1.0,PowerShell,vim,存储编码 utf-8,Fortran 95,gfortran 中没有其他选项
program main
implicit none
call urlencode_one_Text(8552931)
end program main
subroutine urlencode_one_Text(x)
implicit none
integer :: x, remainder = 0, intlen = 0
character(len=10) :: urlencode(10) = ''
character(len=1) :: temp_character = ''
data remainder/ 0/
data intlen/ 10/
urlencode(10) = '\0'
do
print *, 2
intlen = intlen - 1
print *, 2
remainder = mod(x , 16)
print *, 2
x = x / 16
print *, 2
select case (intlen)
case (1)
intlen = intlen - 1
urlencode(1) = '%'
case (4)
intlen = intlen - 1
urlencode(4) = '%'
case (7)
intlen = intlen - 1
urlencode(7) = '%'
end select
select case (remainder)
case (10)
print *, 4
urlencode(intlen) = 'A'
case (11)
urlencode(intlen) = 'B'
case (12)
urlencode(intlen) = 'C'
case (13)
urlencode(intlen) = 'D'
case (14)
urlencode(intlen) = 'E'
case (15)
urlencode(intlen) = 'F'
case default
print *, 5
write(temp_character, *) remainder
urlencode(intlen) = temp_character
temp_character = ''
print *, 6
end select
remainder = 0
if ((16 .ge. x) .or. (10 .eq. intlen)) then
print *, 7
exit
end if
end do
print *, urlencode
return
end subroutine urlencode_one_Text
解决方案
推荐阅读
- java - 通过并发任务的数量限制异步 Mono(不是基于时间的)
- excel - 使用列表框多选从列表中返回多个索引时出错
- javascript - 如何在本机反应中从firebase获取用户ID?
- python - 正则表达式替换两个不同字符串之前或之后的字符串
- android - 资源 android:style/TextAppearance.Material.Widget.Button.Borderless.Colored 未找到
- javascript - 匹配任何主机的 url 的正则表达式
- ruby-on-rails - 如何通过 ruby on rails 获取表单提交的 json 响应
- java - 更改背景颜色的语句
- swift - 滚动视图缩放不尊重 ImageView 的变换
- c# - Linq 查询根据一年的给定月份选择记录