首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >指向局部变量的外部空指针是否安全?

指向局部变量的外部空指针是否安全?
EN

Stack Overflow用户
提问于 2022-04-16 14:51:32
回答 2查看 104关注 0票数 0

我有一个如下所示的结构

代码语言:javascript
复制
struct foo {
  void * elem;
};

我想在这个结构中管理elem的空闲(),但是我不知道它的类型,所以我正在制作一个void *来管理所有的数据类型。将指向局部变量的指针分配给foo.elem安全吗?

例如,这些方法安全吗?

代码语言:javascript
复制
// Method 1
struct foo * get_foo() {
  int a = 10;
  struct foo x = malloc(sizeof(struct foo));
  x.elem = &a;
  return x;
}

// Method 2
void get_foo(struct foo x) {
  int a = 10;
  x.elem = &a;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-04-16 19:19:46

不管您的代码示例作为您所询问的内容的示例的有效性(这两个示例都没有正确地说明问题),在该变量的生命周期之外保留指向变量的指针从来都不是有效或安全的。

删除这样的指针是未定义的行为,原则上任何事情都可能发生。实际上,该变量的内存可以重用,如果您通过指针读取它,它可能不再包含相同的值,如果您写入它,您可能正在修改一些无关的数据对象或破坏调用堆栈--在这两种情况下,行为都是不确定的;对于未定义的行为来说,这一点也没有多大用处。

请注意,这是一个寿命问题,而不是范围问题。指向本地static的指针是有效的。

票数 1
EN

Stack Overflow用户

发布于 2022-04-16 16:12:12

第一个不编译。这是不安全的代码,因为它根本不是代码。

第二个只是无用地修改局部变量x。它是安全的,因为它实际上什么都不做,而不做任何事情也没有本质上的害处。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71894897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档