C 外部结构指针动态分配



我正在尝试在 c 中动态分配一个全局结构,但有些东西使我的 c 文件无法找到对 extern 变量的引用。

日志:

main.c:18: undefined reference to `gate_array'

外出

#ifndef EXTERN_H_
#define EXTERN_H_

typedef struct gate_struct {
    int out;
} gate;
extern gate *gate_array;

#endif /* EXTERN_H_ */

主.c:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include "extern.h"
int main(int argc, char *argv[]){
    gate_array = (gate*) malloc (2* sizeof(gate));
    return 0;
} 

谢谢!

由于extern,没有gate_array的定义。在这种情况下,只需删除extern限定符即可。但是,如果在多个翻译单元中使用extern.h#include在多个.c文件中),则此方法将导致多个定义错误。考虑添加另一个包含gate_array(以及任何未来变量)定义的.c文件,确保只有一个gate_array定义。

extern gate *gate_array告诉编译器有一个名为 gate_array 的变量,但它是在其他地方定义的。但是发布的代码中没有gate_array的定义。


另外,您可能希望阅读我是否施放了马洛克的结果?

这可能是你打算做的:

#ifndef EXTERN_H_
#define EXTERN_H_

typedef struct gate_struct {
    int out;
} gate;
typedef gate *gate_array;

#endif /* EXTERN_H_ */

typedefs gate * gate_array.然后在你的main.c你想做:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include "extern.h"
int main(int argc, char *argv[]){
    gate_array name_of_array = malloc (2* sizeof(gate));
    free(name_of_array);
    return 0;
} 

以前,您缺少变量名称。此外,投掷malloc的回归是一种不好的做法。

指向门的指针,即 gate_array没有声明 typedef,所以你正在做这样的事情:

typedef int *IXX;
IXX = (int*) malloc(2*sizeof(int));

做这样的事情:

IXX ix = (int*) malloc(2*sizeof(int));

相关内容

  • 没有找到相关文章

最新更新