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

标签 c pointers initialization

我是第一次用 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/

相关文章:

c - recv 不会将整个消息保存在缓冲区中

c - 在 c 中使用 ntfw 时跳过子目录

objective-c - Objective-C 中有两个星号 ** 是什么意思?

c++ - 指针帮助 : dereferencing a pointer to a struct accessing data within it

c++ - 带有指针参数的函数模板重载决策

c++ - 成员字段,构建顺序

java - 在这种情况下,FindBugs 'JLM_JSR166_UTILCONCURRENT_MONITORENTER' 是否可以安全地忽略

c - C 中的反向波兰表示法疑难解答

C++ - 继承和初始化问题

字符串常量之前预计出现 c 编程错误 ‘;’ 、 ‘,’ 或 ‘)’