问题标签 [allocatable-array]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
30 浏览

pointers - 数组目标的重新分配,但指针似乎仍然具有值

我有以下非常简单的代码。我不明白的是在我解除分配我的数组之后x,我会假设我的指针ptr不再可以被取消引用。但是,如果您运行该程序,您将看到该print语句将正确地给出 的值x,并且同样给出它的大小,即使我在取消引用指针之前已经释放了数组。

这是因为我的 x 值仍然加载在更高的内存级别(L1、L2 等)上,并且需要更多时间来刷新其状态?

0 投票
2 回答
911 浏览

fortran - 分配具有自身值的可分配数组

我想知道在现代 Fortran 中是否可以使用它自己或它的一部分来分配一个可分配的数组来做到这一点。这是一个简单的例子:

此代码使用 ifort 18 给出正确答案,并使用 gfortran 7.4 返回“分段错误”。

注意:最初的问题有点复杂,因为call assign(a, a(1))应该用call assign(a, a(1)+b)operator + 正确重载来代替,但结论(尊重 ifort 和 gfortran)是相同的。

注意:在 fortran 重载赋值中的自赋值线程检查中,@IanH 区分了call assign(a,a)和, call assign(a,(a))但我相信它不能解决这个问题,因为我有可分配的参数。

注意:在 Fortran 分配时的线程自动数组分配中,@francescalus 解释了内在分配的自动分配,但我再次相信它不适用于这里。

0 投票
1 回答
39 浏览

fortran - 无法在派生类型中打印可分配的分配状态

我想知道为什么这段代码在最后一次打印中返回错误。

使用 gfortran 7.4.0 失败,但使用 ifort 18.0.3 效果很好。

gfortran 错误是:

0 投票
3 回答
1417 浏览

function - Fortran 函数返回可分配数组

让我考虑一个返回allocatable数组的函数。是否应该在赋值之前分配保存结果(函数外部)的数组变量?

例如,考虑以下程序

根据thisthisres ,为结果分配的数组get_matrix一旦超出范围就会被释放。

w对主程序中未分配变量的赋值会延长结果的范围get_matrix吗?换句话说,如果我allocate(w(2,2))在主程序中省略,我会得到一个未定义的行为吗?

使用and 选项省略allocate(w(2,2))和编译会给出以下警告gfortran 9.2.0-Wall -std=f2008

但是,使用 运行程序valgrind以及使用 、 或 进行编译-fbounds-check不会-fsanitize=address产生-fsanitize=leak任何错误。此外,最后的指令deallocate(w)不会使程序崩溃,表明w包含由分配的内存get_matrix,因此不需要w在主程序中分配。

同时,包含allocate(w(2,2))在代码中会抑制编译器警告。尽管给人的印象是相同的内存被分配了两次,valgrind但不会报告内存泄漏,事实上,报告的内存使用情况完全相同。

allocatable将数组存储为函数结果的正确方法是什么?是否有必要w在存储结果之前进行分配get_matrix

0 投票
2 回答
240 浏览

multidimensional-array - 复制到另一个可分配数组后,Fortran 90 不保留数组下限/上限

这不起作用

上面的代码自动分配 B 并将 A(:,:,1) 复制到 B。但是它不保持 0/ny 的下/上限,而是 B 的下限为 1,上限为 ny+1 .

我发现保持 A 2dn-dim 的下限/上限的唯一方法是将 B 显式分配为:

鉴于我有比这个简单示例更多的变量,有没有办法像 B=A(:,:,1) 一样分配,并且在不显式分配 B 的情况下保持 A 的边界?

0 投票
0 回答
71 浏览

variables - 如何将文本文件中的列分配为变量然后写入文件

我有一个包含 4 列和许多行的数据文件,我想将第一列分配给 t,第二列分配给 x,第三列分配给 y,第四列分配给 z。并按行读取数据。所以想象一下:

我将如何将每个变量分配给列?我的程序目前看起来像:program arraycall

这样它就可以读取“x”行,因为我不知道我将拥有多少行。我将如何为每个变量定义每一列并将其写入文件或公共块的想法?

0 投票
0 回答
146 浏览

fortran - 带有可分配字符串的模块上的 f2py

我写了一个非常简单的模块(test.f90)

我现在想使用f2py.

我使用以下命令:

但我得到以下错误。这些错误似乎与可分配字符串相关,我目前无法找到删除它的解决方案。

0 投票
1 回答
58 浏览

fortran - Access extended type components in a SELECT TYPE construct

I'm trying to build an allocatable array with polymorphic elements. A minimal example is the following :

Now, the code above works fine and prints out (as expected) :

The problem is, however, once I try to access the component of each extended type (e.g. r1 of exttype1) by uncommenting the commented part of each write(*,*) line, my compiler (gfortran 7.5.0) gives the following error :

I don't understand why these errors are produced since the compiler obviously recognizes the extended types exttype1 and exttype2. What's the correct way to access r1 and r2?

EDIT : By changing ary(i)%comp to this in each write(*,*) line, the code compiles normally. What difference does this modification make? How are these two NOT equivalent?

0 投票
1 回答
89 浏览

fortran - 我希望在 Fortran 中创建锯齿状数组,但收到“在 (1) 处没有通用 'new' 的特定子例程”

我希望在 Fortran 中创建具有多级分配的锯齿状数组。但是,对于我的构造函数和析构函数过程,我都遇到了“在 (1) 处没有通用'new' 的特定子例程”的错误。

我是 Fortran 的新手。我相信问题是我的第一个论点“M1”不适合。但是,我似乎无法弄清楚为什么。

0 投票
0 回答
144 浏览

arrays - Fortran 函数返回具有非平凡边界的可分配数组

根据对象,我正在努力理解返回可分配数组的函数背后的逻辑。我喜欢这种结构,因为与子例程相比它更清晰,而且 fortran 中的纯函数是编写干净的函数式编程代码的绝佳方式。

假设我必须编写一个简单的函数,返回一个具有任意边界的索引数组,例如在这个程序中:

我通过三种方式实现了它:

  • 返回可分配数组的函数 ( testfun)
  • 子程序 ( testsub)
  • 返回静态数组的函数 ( testfun_noalloc)

该子例程对返回数组进行操作,并正确分配它。(-4:3)在示例中,应返回一个大小合适的数组。在任一实现中,该函数都返回一个(1:hi-low+1)-sized 数组:

为什么会这样?我得到这样一个事实,即在将函数返回值分配给我的 LHS 数组时,fortran 可能会重新分配数组,但即便如此,为什么它没有分配正确的边界?我知道在将静态数组传递给具有 f2003 风格的 lhs 重新分配的可分配对象时可能会发生这种情况,但是以可分配数组作为输入,我希望保留边界信息。我在这里错过了什么吗?顺便说一句,这个例子是用 gfortran 9.2.0 编译的。

谢谢,费德里科