【发布时间】:2012-09-28 13:45:33
【问题描述】:
假设我在 temp.h 中声明了一个结构,如下所示:
/* physical memory */
typedef struct pmem_struct {
uint32_t val;
} pmem_s, *pmem_p;
假设我在我的 temp.c 文件中的方法 pmem_p pmem_new() 中声明了这个结构,如下所示:
pmem_p pmem_new() {
pmem_s pmems;
pmem_p pmem = &pmems;
pmem->val = 0;
//printf(stderr, "From Mem: %x\n", pmem->val);
return pmem;
}
现在这是我的 main.c 文件:
#include <stdio.h>
#include "temp.h"
#include "gen.h"
int main() {
pmem_p pmem = pmem_new(); /* create some physical memory */
fprintf(stderr, "From Mem: %x\n", pmem->val);
......
}
为什么这个 fprintf 打印出 From Mem: 4019cff4,除非我在 pmem_new() 中取消注释 fprintf 行,在该行处两者都正确打印出 From Mem:0强>
【问题讨论】:
-
你返回一个指向在函数结束时被销毁的局部变量的指针。因此返回的指针无效。