我正在尝试在 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));