C struct变量分配?

时间:2012-01-16 02:50:04

标签: c

我是C的新手所以请纠正我的错误。

这里的代码有点像我的代码

//typdef stuff for apple, *apple_t here
apple_t get() {
    apple a;
    a.num = 0;

    apple_t ap = &a;
    printf("set num to %d\n", ap->num);
    return ap;
}

// ap above is placed into read(ap)
void read(apple_t ap) {
    printf("num: %d\n", ap->num);
}

为什么“set”打印ap-> num == 0,但是当我在read函数中执行printf时 我得到一些像-1218550893这样的垃圾号码?这是怎么回事?是否释放了整数集? C做什么?你怎么解决这个问题?

2 个答案:

答案 0 :(得分:9)

您正在返回本地变量的地址。

在这种情况下,变量a是一个局部变量。功能结束后丢失。

有两种方法可以解决这个问题:

  1. 按值返回。不要归还其地址。
  2. 使用malloc()为其分配内存。但是你必须确保free()以后。

答案 1 :(得分:0)

您正在返回一个局部变量,该函数在函数返回后不可用。

C支持返回结构,因此根本不需要指针:

apple_t get() {
    apple_t a;
    a.num = 0;
    return a;
}

以下代码将复制结果,而不是返回局部变量。