内存分配全局结构

时间:2010-11-19 15:21:31

标签: c data-structures memory-management

struct ponto *ps = malloc( sizeof(struct ponto) * colunas * linhas );

我在main()上声明了这个。但是我希望它可以全局访问所有功能。我相信这是使用realloc并在文件的开头声明为null或其他东西。这是对的吗?

struct ponto *ps = null;

然后,当我知道数组结构所需的大小时:

ps = realloc (ps, sizeof(struct ponto) * colunas * linhas);

但这似乎并不奏效。有什么提示吗?

2 个答案:

答案 0 :(得分:1)

使ps全局可见需要它是一个全局变量。您可能还需要对列数和行数进行此操作。

struct ponto *ps;
int colunas, linhas;

int main()
{
    colunas = /* whatever */;
    linhas  = /* whatever */;
    ps = malloc(sizeof(struct ponto) * colunas * linhas);
    /* do other stuff */
}

现在ps对源文件中的所有函数都是可见的,通过它,它们可以访问它指向的内存。

如果你有多个源文件,你必须在头文件中告诉他们ps声明它

struct ponto { /* whatever */ };  /* define the struct in the header */
extern struct ponto *ps;
extern int colunas, linhas;

realloc执行完全不同的操作,它会调整缓冲区ps的大小。标准C中不存在null

答案 1 :(得分:1)

如果你的问题实际上只是变量的范围,你可以这样做:

struct ponto *ps = NULL;
...
int main()
{
    ps = malloc( sizeof(struct ponto) * colunas * linhas );
    ...
}