《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 }
时间: 2024-10-18 15:26:57