以下应用程序同时使用注释掉的 malloced int 和仅使用指向本地 int 'a' 的 int 指针。我的问题是如果没有 malloc 这样做是否安全,因为我认为当函数 'doit' 返回时 int 'a' 超出范围,而 int *p 什么都不指向。该程序是否由于其简单性而没有出现段错误,或者这完全没问题?
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
typedef struct ht {
void *data;
} ht_t;
ht_t * the_t;
void doit(int v)
{
int a = v;
//int *p = (int *) malloc (sizeof(int));
//*p = a;
int *p = &a;
the_t->data = (void *)p;
}
int main (int argc, char *argv[])
{
the_t = (ht_t *) malloc (sizeof(ht_t));
doit(8);
printf("%d\n", *(int*)the_t->data);
doit(4);
printf("%d\n", *(int*)the_t->data);
}
最佳答案
是的,在函数不再在范围内后取消引用指向局部堆栈变量的指针是未定义的行为。你只是碰巧不够幸运,内存没有被覆盖,没有被释放回操作系统,或者在你再次尝试访问它之前变成了一个指向恶魔工厂的函数指针。
关于c - 这个 int 指针示例需要 malloc 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28613466/