如何证明返回局部变量是错误的

#include <stdio.h>
int * func1()
{    int a=3,*p;
     p=&a;
     return p;
}
int func2()
{    int x=9,y=6;
     return x+y;
}
int main()
{    int i=4,*p;
     p=func1();
     i=func2();
     printf("%d %d\n",i,*p);
     return 0;
}
时间: 2024-10-10 07:59:50

如何证明返回局部变量是错误的的相关文章

实战c++中的string系列--函数返回局部变量string(引用局部string,局部string的.c_str()函数)

当函数返回字符串的时候,我们可以定义返回string和string&. 1写一个返回string引用的函数 std::string & TestStringReference() { std::string loal_str = "holy shit"; return loal_str; } 这个函数当然是错误的,编译器会提示我们: 返回局部变量或临时变量的地址: loal_str 即不能返回局部变量的引用. 2写一个返回string的函数(函数返回局部变量string

C++函数返回局部变量

函数不能返回指向栈内存的指针 原因:返回值是拷贝值,局部变量的作用域为函数内部,函数执行结束,栈上的局部变量会销毁,内存释放. 可返回的局部变量: 1. 返回局部变量本身 int sum(int a, int b) { int s=a+b; return s; } 2.常量: char* returnValue() { char* str="HelloJacky"; return str; } char * str="hello world"字符串常量,不能str[

关于 C++ 函数返回局部变量的警告

先来一段代码: #include <stdio.h> #include <tchar.h> char* test(void) { char arr[] = "Hello,World\n"; // arr[] 所有元素保存在栈内存上,arr 是个符号地址,没有存储空间 return arr; // warning C4172: 返回局部变量或临时变量的地址 // 即警告返回了指向栈内存的指针,返回后栈内存都会被自动回收 } int _tmain(int argc,

C++返回局部变量的引用的问题

结论: (1)不能返回局部变量的引用给一个引用变量. (2)但是如果返回引用给一个相关的非引用变量的话是可以的. 原因如下: 问题一: 返回一个局部变量的引用.如: int& ABC() { int n = 5; return n; } void main() { int x; x=ABC(); cout<<x<<endl; } 为什么这里能接收到 返回局部变量的引用呢?局部变量n没有被销毁吗? 解释: (1) 所谓不能返回局部变量,是指局部变量在栈空间中分配内存,函数返回

返回局部变量的问题

函数返回局部变量,是返回局部变量的值.但指针(或地址)是一种特殊的值,所以返回局部指针变量需要特别注意.正确情况下,作为函数返回值的局部指针,其所指向对象的作用域应该是调用者作用域.全局或静态常量区:指向栈空间对象的指针作为返回值,存在潜在的错误. 1.       返回局部值变量 [cpp] view plaincopy int num(void) { int a; return a; } 函数返回时,将返回a的副本(值),然后a被注销,所以不存在问题. 2.       返回局部指针变量 2

3星|林毅夫《战胜命运》:事实证明华盛顿共识是错误的,GIFF是穷国发展正道。

本书是林毅夫与喀麦隆一位经济学家合著.基本的观点是:事实证明华盛顿共识是错误的,GIFF是穷国发展正道.GIFF的主要思想是政府找到对标国家,强力推行产业政策. 作为一个经济学外行,读后感觉关于华盛顿共识的错误的推理过程是比较严密的,但是作者推崇的指引穷国致福的明灯GIFF,没有实际应用的案例,这应该是GIFF比较大的一个缺陷. 全书有一些经济学的公式,相对来说可读性稍差. 近期林毅夫给吉林开的振兴经济的药方,基本跟书中的思路一致. 总体评价3星. 以下是书中一些信息的摘抄: 1:简而言之,本书

基于返回值的错误处理与异常处理机制

基于返回的错误处理和异常处理机制的比较 一.基于返回值的错误处理机制 对于传统的面向过程语言比如说C语言,通常使用基于返回值的错误处理机制,即通过在程序中定义程序出错时的返回值,比如说0代表操作成功,而1代表操作失败. 这种错误处理机制的好处在于有时候即使出现了异常程序或许也可以继续执行(但是最终执行结果或许不对,而这就导致查错比较困难,因为有时候仅仅通过函数返回值我们并不知道程序出错的原因究竟是什么,比如说程序操作失败返回值为0,我们在控制台上看到程序输出为0,但是除此之外没有其他额外的信息帮

函数返回局部变量的问题

1.函数可以返回局部变量 当函数的局部变量作为函数的返回值时,其实是不知道是谁(是程序?)会自动生成一个变量的副本即拷贝作为函数的返回值,而原有的局部变量将被销毁. 注意函数不可以返回局部变量的地址或者某个指针,以为当函数运行完了(这里改咋说),系统会回收这块地址,因此这个地址里面 的东西也就没有意义了. 静态变量可以返回指针. 2. int a[] = {1, 2}; return a; 此时也会返回指针a的一个拷贝,若a的地址值为0x002345FC,则0x2345FC是能够成功返回的.当r

C++编程经验-返回局部变量的讨论(转)

返回局部变量没问题 如果返回局部变量有问题,函数的意义还有吗? 全局变量还用返回吗? 返回指向局部变量的指针才有问题, 函数退栈之后,局部变量消失, 指针将指向未知区域,所以出现问题. 返回局部变量的引用也是绝对不可以的. 引用只是变量的一个别名,变量本体都不存在了,引用当然也没有任何意义. 还有,如果是堆空间,可以返回,即在函数中用new申请的空间,是可以返回的. 但是一般的情况下,好的风格是: 尽量在同一个作用域内成对使用new   和delete,(也即不要返回堆空间),因为如果不是这样,