Sun Studio 12:Fortran 库参考

1.4.35.2 realloc:重新分配内存

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() 例程。