小编jam*_*625的帖子

"无法分配给命名常量"(重新分配变量)

我正在使用标志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. …

fortran gfortran

2
推荐指数
1
解决办法
8683
查看次数

在 C 中释放指向 malloc 内存的指针的副本

似乎在其他地方找不到我的问题的答案。

考虑代码:

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()接受一个指针并使其指向NULLaka (nil)。即,指针被取消引用并且指向任何地方。这意味着指针指向的内存被有效擦除。

这个问题分为两个部分:

  1. 如果我运行上面的代码,dummyPtr似乎仍然指向内存中的地址而不是(nil). 为什么?
  2. 会发生什么ptr?它仍然指向该内存块还是也被取消引用?

我已经多次运行此代码和某些变体,但结果相互矛盾。有时只有副本受到影响,有时两者都受到影响。有时指向的值甚至设置为零!

坦白说,我不知道发生了什么事。(我正在运行 Debian,如果这有什么区别的话。)

c malloc free pointers copy

1
推荐指数
1
解决办法
2233
查看次数

标签 统计

c ×1

copy ×1

fortran ×1

free ×1

gfortran ×1

malloc ×1

pointers ×1