1

我正在尝试声明一个可用于多个 .c 文件的变量。它是指向结构的指针的分配数组。

据我了解,我必须在头文件中用 extern 声明它,但由于我不能在头文件中 malloc 声明它,我是否在头文件中声明它,然后在 .c 文件中声明它?我看不出这是怎么做到的。

4

7 回答 7

4

您将声明放在标题中,将定义放在 .c 文件中,并malloc在第一次取消引用指针之前执行的函数中调用(例如main函数)。所以它看起来像这样:

富.h:

extern struct your_struct** pointer;
void foo_init();
void foo_cleanup();

富.c:

#include <stdlib.h>
#include "foo.h"

struct your_struct** pointer;

void foo_init() {
    pointer = malloc(sizeof(your_struct*) * some_size);
    // initialize the pointer in the array
}

void foo_cleanup() {
    // free the pointers in the array if you used malloc to initialize them
    free(pointer);
}

主.c:

#include "foo.h"

int main() {
    foo_init();
    // do other stuff
    foo_cleanup();
    return 0;
}
于 2013-05-01T11:06:56.290 回答
1

由于要使用动态变量,因此必须使用指针。除了声明之外,您还需要在某处定义它。在您的情况下,您还应该尽早在代码中分配内存,即在 main 的第一行。

于 2013-05-01T11:05:25.793 回答
0

是的,您在标头中声明它,并malloc在 .c 文件中声明它。Malloced 指针本身没有作用域,只有在它们为freed 时才被释放。因此,您可以在整个程序中使用指针。

于 2013-05-01T11:03:45.937 回答
0
  1. extern在头文件中声明
  2. .c在您的文件之一中将其定义为全局
  3. 在同一个.c文件中分配指向的数组

你可以走了。

但是请注意,如果您在不同的文件中访问它,您需要确保在每次访问时数据已经被分配(并且尚未释放)。

于 2013-05-01T11:07:12.620 回答
0

在头文件中声明指针。在所有引用指针的 .c 模块中包含标头。

extern struct yourstruct *ps;

然后在最相关的.c模块中定义变量

struct yourstruct *ps;

ps = malloc(....
于 2013-05-01T11:07:24.433 回答
0
FILE **file_array=NULL;

function(){
    file_array = malloc(size*sizeof(FILE*));
}
于 2013-05-01T11:07:38.637 回答
0

您需要在 c 文件中对其进行 malloc 并在头文件中声明它。您还需要注意它的访问和释放。它必须被释放并且只有一次。可能在程序执行结束时。您还需要在多个文件中访问它之前设置保护条件(检查是否为空)。

于 2013-05-01T11:07:54.560 回答