我正在使用标志f
进行一些错误检查.当我想要进行另一次检查时,Fortran(或者gfortran)不会让我重新分配它的价值.
integer, dimension(:,:), allocatable :: A
integer :: f, n
write (*, *) "Give an integer n > 0. n = "
read (*, IOSTAT=f) n
do while(f /= 0)
print *, "Error with input. Please try again."
read (*, IOSTAT=f) n
end do
write (*, "(a, i5)") "You have entered n = ", n
allocate(A(n), STAT=f)
if (f /= 0)
print *, "Error: not enough memory for A."
end if
Run Code Online (Sandbox Code Playgroud)
注意:我认为复制粘贴可能会弄乱我的间距.
f
已被宣布为一个整数(而不是作为一个参数整数): integer :: f
. …
似乎在其他地方找不到我的问题的答案。
考虑代码:
int *ptr = malloc (sizeof (*ptr));
int *dummyPtr = ptr;
free (dummyPtr);
printf ("ptr: %p, dummy: %p\n", ptr, dummyPtr);
Run Code Online (Sandbox Code Playgroud)
据我了解,free()
接受一个指针并使其指向NULL
aka (nil)
。即,指针被取消引用并且指向任何地方。这意味着指针指向的内存被有效擦除。
这个问题分为两个部分:
dummyPtr
似乎仍然指向内存中的地址而不是(nil)
. 为什么?ptr
?它仍然指向该内存块还是也被取消引用?我已经多次运行此代码和某些变体,但结果相互矛盾。有时只有副本受到影响,有时两者都受到影响。有时指向的值甚至设置为零!
坦白说,我不知道发生了什么事。(我正在运行 Debian,如果这有什么区别的话。)