c++函数返回局部变量

来源:互联网 发布:开网店软件 编辑:程序博客网 时间:2024/05/20 17:40
char* func()  {      char arr[] = "Hello,World\n"; // arr[] 所有元素保存在栈内存上     return arr;  // 返回局部变量或临时变量的地址      /*即返回了指向栈内存的指针,而返回后栈内存都会被自动回收,main里面接收到的地址指向的内存已经不存在,变为野指针 */}  int main()  {      printf("%s", func());  // 打印出垃圾数据,也可能打印出 "Hello,World,取决于编译器对栈内存回收的处理方法      return 0;  }  

改进方法如下:

char* func()  {      char *arr = "Hello,World\n";    // "Hello,World\n" 保存在只读常量区,非栈内存不受函数返回影响      return arr;   // 其实返回的是 arr 的副本,返回后 arr 变量也销毁,但是其指向常量区不受影响  }  int main()  {      printf("%s", func());   // 能打印出 Hello,World      getchar();      return 0;  }
char* func()  {      static char arr[] = "Hello,World\n";    // "Hello,World\n" 保存在静态存储区,非栈内存不受函数返回影响。      return arr;  //返回指向静态存储区的指针  }  int main()  {      printf("%s", func());   // 能打印出 Hello,World      return 0;  }  
0 0