首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >指针数组中的垃圾值

指针数组中的垃圾值
EN

Stack Overflow用户
提问于 2013-02-19 13:31:48
回答 2查看 1.2K关注 0票数 2
代码语言:javascript
运行
复制
#include <stdio.h>
void func(int **);

int main()
{

  int *arr[2];

  func(arr);

  printf("value [1] = %d \n",*arr[0]);

  printf("value [2] = %d \n",*arr[1]);
  return 0;
}

void func(int **arr)
{
  int j = 10;
  arr[0] = &j;
  arr[1] = &j;
}

使用gcc成功地编译了代码。但是,输出为:

代码语言:javascript
运行
复制
value [1] = 10 

value [2] = 32725 

第二个值是垃圾值。为甚麽呢?如何正确使用双指针来访问数组?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-19 13:33:48

它是。

您正在存储的局部变量j的地址不存在于函数之外。

j被保证只存在于函数作用域{ }中。一旦此作用域结束,通过其地址引用j将导致未定义的行为。

未定义的行为意味着编译器不需要显示任何特定的观察到的行为,因此它可以显示任何输出。

票数 9
EN

Stack Overflow用户

发布于 2013-02-19 13:37:36

代码语言:javascript
运行
复制
int j=10;

是堆栈上分配的局部变量。在函数外部取消引用它是未定义的行为。警告:永远不会返回指向任何局部变量的指针,除非您非常确定自己在做什么。如果你有把握,再考虑一下。

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

https://stackoverflow.com/questions/14950514

复制
相关文章

相似问题

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