这是一个可重复的例子,而不是整个代码——整个代码太大了。。我的问题是,我有一个使用malloc创建的结构,我需要从另一个文件中的另一个函数访问它,但我一直得到segfault。。。
头文件main.h
#ifndef main_a
#define main_a
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct cmd_s
{
int n;
} cmd_t;
extern cmd_t *ptr;
void push(char *line);
#endif
主.c文件main.c
#include "main.h"
cmd_t *ptr = NULL;
int main(void)
{
cmd_t *ptr = malloc(sizeof(cmd_t));
ptr->n = 5;
push("line");
return (0);
}
以及我需要从命名的opcode.c 访问结构的位置
操作码.c
#include "main.h"
void push(char *line)
{
int new = ptr->n;
}
注意,这不是实际的代码,实际的代码有有用的值,这是一个包含我面临挑战的例子
我试着用static代替,但是我得到了同样的错误。我还是c编程的新手。。我不想改变我通过malloc创建结构的方式,因为另一个函数依赖于它…我只需要让程序中的另一个文件可以访问malloc结构。谢谢
int main(void)
{
cmd_t *ptr = malloc(sizeof(cmd_t));
创建仅在函数main
中可见的新ptr
变量。您的push
看到的是全局指针ptr
,而不是您拥有的malloc
。
你需要
int main(void)
{
ptr = malloc(sizeof(*ptr));
/* .... */
在sizeof
中使用obiects而不是类型(如本例所示(