f95 内函数 realloc() 的调用方式如下所示:
k = realloc(ptr, n ) |
|||
ptr |
INTEGER |
输入 |
现有内存块的指针。(上次调用 malloc() 或 realloc() 时返回的值)。 |
n |
INTEGER |
输入 |
请求的新内存块大小(以字节数表示)。 |
返回值 |
INTEGER (Cray POINTER) |
输出 |
k>0:k 是分配的新内存块起始位置的地址 k=0:错误 |
如果使用 -m64 针对 64 位环境进行了编译,则返回 INTEGER*8 指针值。参见下面的说明。 |
realloc() 函数将 ptr 指向的内存块的大小更改为 n 字节,并返回指向(可能已移动的)新内存块的指针。内存块的内容保存不变,其大小为新内存块大小和旧内存块大小中较小者。
如果 ptr 为零,则 realloc() 的行为与 malloc() 的行为相同,其分配大小为 n 字节的新内存块。
如果 n 为零而 ptr 不为零,则指向的内存块可以进一步进行分配,且仅在终止应用程序后才返回给系统。
示例:使用 malloc() 和 realloc() 以及 Cray 样式的 POINTER 变量:
PARAMETER (nsize=100001) POINTER (p2space,space) REAL*4 space(1) p2space = malloc(4*nsize) if(p2space .eq. 0) STOP ’malloc: cannot allocate space’ ... p2space = realloc(p2space, 9*4*nsize) if(p2space .eq. 0) STOP ’realloc: cannot reallocate space’ ... CALL free(p2space) ... |
请注意,只有 f95 中实现 realloc() 例程。