c - C中的全局指针

标签 c pointers scheme interpreter

我是 C 语言的新手,我目前正在用 C 语言实现一个 Scheme 解释器。我快要结束了,但一个问题困扰着我,我还没有解决。

我想要一个指向结构的“globalEnvironment”指针,该结构在程序运行和修改的整个过程中都保持不变(不是常量)。

/****************************************************************
 Creates the List as a pointer to the conscell structure
 */
typedef struct conscell *List;

/****************************************************************
 Creates a conscell structure, with a char pointer (symbol) and two pointers to
 * conscells (first and rest)
 */
struct conscell {
    char *symbol;
    struct conscell *first;
    struct conscell *rest;

};


List globalEnvironment;


/****************************************************************
 Function: globalVariables()
 --------------------
 This function initializes the global variables
 */
void globalVariables() {

globalEnvironment = malloc(sizeof (struct conscell));
globalEnvironment->symbol = NULL;
globalEnvironment->first = NULL;
globalEnvironment->rest = NULL;

}

如您所见,“List”是指向 conscell 结构的指针。所以我只希望 globalEnvironment 列表是全局的。

问题是我不能在那里做malloc。如果我尝试以下操作:

List globalEnvironment = malloc(sizeof (struct conscell));

而不仅仅是“列出全局环境;”它给出了一个错误,“初始化元素不是常量”

为了解决这种情况,我创建了一个新函数“globalVariables”,它在程序开始时运行,初始化 globalEnvironment 并为其分配内存。 但是它没有像我预期的那样工作,并且我不断收到其他函数的段错误错误,为了简单起见,我没有在此处编写这些错误。

是否有另一种更简单的方法来声明指向 C 中结构的指针(非常量)?

希望有人能帮忙, 谢谢

最佳答案

当您应该只使用全局数据时,您似乎正在尝试 malloc。你可以试试

struct conscell globalEnvironment;

请记住永远不要释放它。

如果您需要一个指针句柄以便将单元格插入列表:

struct conscell _globalEnvironment;
List globalEnvironment = &_globalEnvironment;

不过,请记住永远不要free _globalEnvironment

关于c - C中的全局指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13815151/

相关文章:

scheme - 为什么 (* 1.1 1.1) 在 Racket 中是 1.2100000000000002?

python - 在 Python 中实现 lisp

c - 如何在 C 中的堆栈上创建一个结构?

c - Windows 中使用 Codeblocks 和 MinGW 的 C 语言 #elif 编译器指令

c - 如何在 C 中释放树时找出导致内存泄漏的原因

c - 在 C 中声明结构数组时的奇怪之处

以指针为参数的c++函数问题

c++ - 在 C++ 中没有类的情况下从 main() 访问函数内部的静态变量

C 错误处理编码风格

scheme - 将值添加到方案中的定义列表