static Token *make_token(Token *tmpl) {
Token *r = malloc(sizeof(Token));
*r = *tmpl;
r->hideset = NULL;
File *f = current_file();
r->file = f;
r->line = pos.line;
r->column = pos.column;
r->count = f->ntok++;
return r;
}
它们将内存分配给*r。然后他们将其等同于 *tmpl。我假设分配内存的位置被覆盖了?请解释一下。
最佳答案
困惑来自于声明指针的语法 Token *r = malloc(sizeof(Token));
与取消引用指针的语法 (*r
) 相匹配。第一行实际上意味着它初始化一个指向名为 r
的 Token
的指针,并且相当于 Token* r
,而第二行取消引用r 指向的空间并修改它。因此,完整的代码采用一个指向结构的指针,将该结构复制到通过 malloc 创建的新内存中,并对其执行操作 - 指针在任何时候都不是 r 。分配后仅更改其指向的数据。
请注意,如果 tmpl
为 NULL
,则此代码的行为未定义。
关于c - 在此片段中,内存分配有帮助吗?我认为它被 *tmpl 覆盖了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47211577/