gpt4 book ai didi

c - 为什么我的初始化函数返回 null?

转载 作者:太空宇宙 更新时间:2023-11-04 05:57:39 27 4
gpt4 key购买 nike

我是第一次用 C 编写程序。我对 C++ 有很多经验,但 C 对指针的依赖以及 newdelete 的缺失让我很失望。我定义了一个简单的数据结构,并编写了一个函数来初始化它(通过获取一个指针)。这是我的代码:

//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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com