我是第一次用 C 编写程序。我对 C++ 有很多经验,但 C 对指针的依赖以及 new
和 delete
的缺失让我很失望。我定义了一个简单的数据结构,并编写了一个函数来初始化它(通过获取一个指针)。这是我的代码:
//in Foo.h
#include <stdio.h>
#include <stdlib.h>
typedef struct Foo {
struct Foo * members[25] ;
} Foo ;
void foo_init(Foo * f) ;
void foo_destroy(Foo * f) ;
//in Foo.c
void foo_init(Foo * f) {
f = (Foo*)malloc(sizeof(Foo));
for (size_t i = 0 ; i < 25 ; i++) {
f->members[i] = NULL ;
}
}
//define foo_destroy()
//in main.c
#include "Foo.h"
int main(int argc, const char * argv[])
{
Foo * f ;
foo_init(f) ;
/* why is f still NULL here? */
foo_destroy(f) ;
/* ... */
return 0;
}
当我在 f
(指向 Foo
结构的指针)上测试我的 foo_init()
函数时,它在函数返回后为 null。指针 f
inside foo_init()
初始化得很好,但是,所以我认为这不是 init 函数本身的问题.在黑暗中拍摄,但这是否与 C 处理按值传递/按引用传递的方式有关(我仍然不完全了解这一点)?我该如何纠正这个问题?
最佳答案
1) 你在你的 for 循环中越界了,(正如 @user3121023 所指出的,更改为 25
)
2) 您正在 (m) 为局部变量分配空间,使用:
Foo *foo_init(void) {
Foo *f = malloc(sizeof(Foo)); /* don't cast malloc */
for (size_t i = 0 ; i < 25 ; i++) {
f->members[i] = NULL ;
}
return f;
}
在 main
中:
f = foo_init();
关于c - 为什么我的初始化函数返回 null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24324429/