c - C:初始化结构并将其分配给函数参数中的指针
问题描述
由于在 Uni 的分配,我面临着必须将结构初始化为作为函数参数提供的指针的奇怪问题。在该 init 函数中一切看起来都很好,但是一旦我尝试在不同的函数中访问对象的值,它们看起来就是空的。
由于我在解释事情方面很糟糕,我得到了一个带有实际和预期输出的小例子:
#include <stdlib.h>
#include <stdio.h>
struct foo {
int bar;
};
void init_foo(struct foo* f) {
f = malloc(sizeof(struct foo));
f->bar = 5;
printf("bar0: %d\n", f->bar);
}
void print_foo(struct foo* f) {
printf("bar1: %d\n", f->bar);
}
int main() {
struct foo f;
init_foo(&f);
print_foo(&f);
}
实际输出:
bar0: 5
bar1: 0
预期输出:
bar0: 5
bar1: 5
我以前没有过多地处理过 C,所以如果有人可以对此提供解释和/或解决方案,我将非常感激。
解决方案
在main()
,f
是foo
结构的分配版本。您将指向该分配结构的指针传递给init_foo()
.
没有f
必要malloc()
在init_foo()
. f
已经指向一个分配的结构。
我认为如果您只是删除malloc()
,它应该可以工作。
推荐阅读
- python - 如何使用python创建具有多个相同标签的xml
- sql - 如何在多个 JSON 中查找多个键并仅返回那些在 postgresql9.5 中具有某些值的行
- spring - 使用将抽象类扩展为@RequestBody 的类是否被认为是一种好习惯?
- android - 以 Activity 为入口点的库 API - 如何向主模块提供结果?
- html - 导航栏中的 Google 自定义搜索引擎搜索栏
- unix - 有没有办法在尝试复制到 Unix 服务器之前检查 MVS 中的文件是否存在
- javascript - (Nuxt)页面不会在重新加载时重新呈现数据
- python - 如何将 Django 中生成的 PDF 文件保存到我的项目中的指定目录?
- angular - 在 Angular 应用程序中进行身份验证的可能性
- google-bigquery - 使用 Regexp_contains