码迷,mamicode.com
首页 > 其他好文 > 详细

自动变量和开辟内存的生存期和作用域探讨

时间:2015-05-07 21:46:45      阅读:284      评论:0      收藏:0      [点我收藏+]

标签:

  《C程序设计》谭浩强第4版针对Auto变量的生存期作用域做出了说明,包括内存管理与释放,指出“函数执行完后,会自动释放自动变量所占用的内存单元”

  函数结束后,自动变量会被释放,即便以指针的形式返回,返回后,指针地址没有变,但是,任何读取操作都会刷新这段内存到不可预知的状态

     如果使用函数返回值,可以使用malloc申请内存,操作完成后return出去

     代码及运行结果如下:

 1 // CUITestingCPP.cpp : 定义控制台应用程序的入口点。
 2 //
 3 
 4 #include "stdafx.h"
 5 #include <iostream>
 6 using namespace std;
 7 
 8 typedef struct CvHistogra
 9 {
10     int type;
11     float** thresh2;
12     int aas;
13 }
14 CvHistogra;
15 
16 CvHistogra * createHist()
17 {
18     CvHistogra hist_value;
19     hist_value.type = 2;
20     cout << "hist_value变量地址:" << &hist_value << endl;
21     cout << "hist_value成员type的值:" << hist_value.type << endl;
22     return &hist_value;
23 }
24 
25 CvHistogra * mallocHist()
26 {
27     CvHistogra *  hist_value = (CvHistogra*)malloc(sizeof(CvHistogra));
28     hist_value->type = 5;
29     cout << "hist_value变量地址:" << hist_value << endl;
30     cout << "hist_value成员type的值:" << hist_value->type << endl;
31 
32     return hist_value;
33 }
34 
35 int _tmain(int argc, _TCHAR* argv[])
36 {
37     CvHistogra * histTest;
38     histTest = createHist();
39 
40     cout << "histTest成员type的值:" << histTest->type << endl;
41     cout << "histTest成员type的值再输出一次值改变:" << histTest->type << endl;
42     cout << "histTest  指针的值:" << histTest << endl;
43 
44     //free(histTest);//histTest所指向的内存不是malloc开辟的,是栈上的内存,所以使用free释放失败
45 
46     cout << endl;
47     cout << endl;
48 
49     CvHistogra * mallHist;
50     mallHist = mallocHist();
51     cout << "mallHist  指针的值:" << mallHist << endl;
52     cout << "mallHist 成员type的值:" << mallHist->type << endl;
53     cout << "mallHist 成员type的值:" << mallHist->type << endl;
54 
55     mallHist->aas=9;
56 
57     free(mallHist);
58     mallHist = NULL; //释放完毕要置为null,不然下边一行还能够输出,只是输出的是错误的值
59     //cout << "mallHist 成员type的值:" << mallHist->type << endl;
60 
61     system("pause");
62 
63     return 0;
64 }

技术分享

 

自动变量和开辟内存的生存期和作用域探讨

标签:

原文地址:http://www.cnblogs.com/tingshuixuan2012/p/4485527.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!