先看代码,发现问题
#include <iostream>
#include <Windows.h>
using namespace std;
int * add(int x,int y){
int sum=x+y;
return ∑
}
int * add1(int x,int y){
int *sum=NULL;
sum=new int;
*sum=x+y;
return sum;
}
int main()
{
int a=3,b=5;
int *sum=NULL;
int *sum1=NULL;
sum=add(a,b);
sum1=add1(a,b);
cout<<"*sum:"<<*sum<<endl;
cout<<"*sum1:"<<*sum1<<endl;
system("pause");
return 0;
}
显示结果
同样的代码多次运行
当注释掉sum1之后
并没有改动什么函数体结果却打印出8,为啥之前打印不出8,反而打印出一些奇怪又每次不同的数值?
结论:合理的动态内存有利于程序更加高效的利用内存,也不容易让数据溢出,栈区的内存是有限的,而局部变量都是在栈区,当程序只运行add(a,b);时,局部变量sum的内存并没有被其他的变量占用覆盖掉,而且当add(a,b);运行结束时,他整个内存已经出栈了,而我们还去拿就会出现警告.当我们用add1(a,b);时,出栈的内存会被他覆盖掉,而我们用动态内存sum=new int;我们没有释放掉它是会一直有地址在的
凡是存储周期是自动出栈的都是局部非静态的,静态变量内存和地址一直在内存中.