在h.c文件中:
#include <stdlib.h>
typedef struct
{
int x;
}XS;
typedef struct
{
XS x_array[10];
}YS;
extern YS y;
在m.c文件中:
#include "h.c"
int void main()
{
YS y = malloc(sizeof(YS));
y.x_array[0].x = 1;
free(y);
return 0;
}
这不会编译,我不知道为什么。有人能解释一下吗?
您的main必须如下所示:
#include "h.h"
int main()
{
YS *y = malloc(sizeof(YS));
y->x_array[0].x = 1;
free(y);
return 0;
}
在h.h文件中:
#ifndef H_H
#define H_H
#include <stdlib.h>
typedef struct
{
int x;
}XS;
typedef struct
{
XS x_array[10];
}YS;
#endif
您的代码存在多个问题:
1.在h.c中,您将YS y
声明为extern
,这意味着编译器需要对y进行外部全局声明。但您已在m.c 中将其声明为本地对象
- 您正在尝试为静态对象
malloc
h.h
#include <stdlib.h>
typedef struct
{
int x;
}XS;
typedef struct
{
XS x_array[10];
}YS;
YS *y;
m.c:
#include <stdlib.h>
#include "h.h"
extern YS *y;
int void main()
{
y = malloc(sizeof(struct YS));
y->x_array[0].x = 1;
free(y);
return 0;
}