c-在声明和初始化全局结构时遇到问题



在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 中将其声明为本地对象

  1. 您正在尝试为静态对象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;
}

相关内容

  • 没有找到相关文章