先给出简单函数例子:
1.
int *getmem(int n)
{
int *p=new int[n];
return p;
}
2.
int *geta(int *b)
{
int a[10];
对a数组初始化...
return a;
}
在使用他们时例1没错,例2就有问题了。我不大明白的是函数返回后,里面的局部变量是怎样销毁的,是联着所申请的内存空间(例1中p申请了一块自由存储区)一块也销毁吗?还是只销毁变量
1.
int *getmem(int n)
{
int *p=new int[n];
return p;
}
2.
int *geta(int *b)
{
int a[10];
对a数组初始化...
return a;
}
在使用他们时例1没错,例2就有问题了。我不大明白的是函数返回后,里面的局部变量是怎样销毁的,是联着所申请的内存空间(例1中p申请了一块自由存储区)一块也销毁吗?还是只销毁变量
解决方案 »
- 关于clock()的计时精度
- 如何查看程序链接的库
- vc网络编程中是否可以对底层数据包中的数据进行操作?
- directshow中如何实现挑选章节的遍历播放?
- 编了一段计算阶乘的代码,计算结果让我匪夷所思,请教大家啊
- 进程在win98中出现问题
- 涉及ADO、多线程、压缩解压的服务程序源代码,希望对大家有帮助!
- 又是一个CTreeCtrl的问题!
- 菜鸟系列:一个编译错误,我很是迷惑,请高手指点!!!! 八百里加急!!!!!!!!!!!!!!!!!!1
- 【求助】请问visula studio 2017中穿件的C++win32程序,拖拽界面在哪里?
- 对话框窗口无法自动垂直水平刷新
- 如何在一个自定义的类中获得CMainFram的DC
简化如下:
string operator+(const string &,const string &)
{
string tmp;
...
return temp;
}
这里就返回了一个放栈里的变量不知何解?
-------------------------
自己动态申请(new)的内存需要自己手动释放, 否则由系统自动释放.
string operator+(const string &,const string &)
{
string tmp;
...
return temp;
}
我就不大明白了好象跟不能返回栈里的变量有矛盾,这里就返回了栈里的变量
http://www.cppblog.com/oosky/archive/2006/01/21/2958.html
简化如下:
string operator+(const string &,const string &)
{
string tmp;
...
return temp;
}
这里就返回了一个放栈里的变量不知何解?
个人理解:
因为你的函数有返回值,其实并不是返回temp。
本人在写了一串口通讯驱动程序,测了下使用其receive函数的时间竟然要>=240ms太郁闷了,要是我一次循环多读几组那不一次循环下来得要2、3秒啊。这是怎么回事啊,有没碰到过的给指点下谢谢!
简化如下:
for(i<n)
{
1.send()发
...
2.receive收
}
上面1和2之间没花啥时间,就执行2后要花>=240ms
而new的是heap内存,必须要delete掉才释放。
所以2是危险和错误的。
你的send然后receive很不可靠.