C++程序中数组返回值的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++程序中数组返回值的问题相关的知识,希望对你有一定的参考价值。

#include<iostream>
#include<ctime>
#define Max 5
using namespace std;
int array[Max];
void createArray()

srand((unsigned)time(0));
for( int i=0; i<Max; i++)
array[i] = (int)(rand()%100);

void output(int *Output)

for( int i=0; i<Max; i++)

cout<<Output[i]<<" ";
if ( (i+1) % 5 == 0 )
cout<<endl;


int *insert()

int temp;
int insert1[Max];
for ( int i=0; i<Max; i++)

for ( int j=i+1; j<Max; j++)
if ( array[i] > array[j] )
temp=array[i];array[i]=array[j];array[j]=temp;
insert1[i] = array[i];

output(insert1);
return insert1;

int main()

createArray();
output(array);
output(insert());
return 0;

为什么主函数里第二个调用output函数输出的结果是:
-858993460 -858993460 -858993460 -858993460 4
是哪里出错了,为什么出错?希望给出详细的解说。

参考技术A insert1是在insert()内部的局部变量,当insert()方法返回时,该局部变量已经失效,insert1实际是指向堆栈中的指针,而堆栈中的数据在调用cout时已被破坏,因此出现的是随机数据追问

函数返回后,是返回一个地址吧,那这个地址应该被调用的output函数传到output函数里了吧,那之后的事也和insert1无关了吧,释放了insert1内存,会把里面的内容也释放?具体是怎么样释放的?

参考技术B 用法不对,insert1是局部变量,函数返回内存就释放了,所以不要将insert1返回,可以返回array,它是全局变量,程序在,它就在,可以返回它的地址追问

函数返回后,是返回一个地址吧,那这个地址应该被调用的output函数传到output函数里了吧,那之后的事也和insert1无关了吧,释放了insert1内存,会把里面的内容也释放?具体是怎么样释放的?

追答

函数返回后,是返回一个地址吧,//对
那这个地址应该被调用的output函数传到output函数里了吧,//对
那之后的事也和insert1无关了吧,释放了insert1内存,//对
会把里面的内容也释放?//不一定, 它只是从内存管理结构中释放了一个类似于节点的东西,并没清空,如果该时间段没有栈内存申请,可能还在,如果有,可能就被覆盖掉了

本回答被提问者采纳

以上是关于C++程序中数组返回值的问题的主要内容,如果未能解决你的问题,请参考以下文章

从我的 c++ 应用程序调用 c# dll(解析 XML 文件)以将数组/列表返回给 c++

在 C++ 中返回多维数组的函数

从 C++ 中的数组中删除重复项 [关闭]

C++如何默认输出一个数组?

从函数C++返回3个元素[重复]

将数据从 c++ 程序传递到 linux 上的 python 程序 [关闭]