Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 函数返回数组,但main显示垃圾_C++_Arrays_Function_Pointers_Return - Fatal编程技术网

C++ 函数返回数组,但main显示垃圾

C++ 函数返回数组,但main显示垃圾,c++,arrays,function,pointers,return,C++,Arrays,Function,Pointers,Return,下面的代码正在打印垃圾值。我将一个数组传递给一个函数,该函数向每个元素添加5,但当它返回该数组的指针时,main显示的是垃圾 我尝试了索引和指针,但结果仍然相同。我怎样才能解决这个问题 # include <conio.h> # include <iostream> using namespace std; int * add5ToEveryElement(int arr[], int size) { int theArray[5]; for(int i

下面的代码正在打印垃圾值。我将一个数组传递给一个函数,该函数向每个元素添加5,但当它返回该数组的指针时,main显示的是垃圾

我尝试了索引和指针,但结果仍然相同。我怎样才能解决这个问题

# include <conio.h>
# include <iostream>
using namespace std;

int * add5ToEveryElement(int arr[], int size)
{
    int theArray[5];
    for(int i=0; i<size; i++)
    {
        theArray[i] = arr[i] + 5;
        cout<<theArray[i]<<endl;
    }
    return theArray;
}

void main()
{
    const int size = 5;
    int noArr[size];
    for(int i=0; i<size; i++)
    {
        noArr[i] = i;
    }
    int *arr = add5ToEveryElement(noArr, size);
    cout<<endl;cout<<endl;
    for(int i=0; i<size; i++)
    {
        cout<<arr[i]<<endl;
    }
    cout<<endl;cout<<endl;cout<<endl;cout<<endl;
    for(int i=0; i<size; i++)
    {
        cout<<*arr<<endl;
        *arr++;
    }
    getch();
}
#包括
#包括
使用名称空间std;
int*add5ToEveryElement(int arr[],int size)
{
阵列内[5];

对于(int i=0;i
,数组是返回main()的函数
add5toeverylement()
中的本地数组。这是未定义的行为

您至少可以更改此行:

int theArray[5];
致:

它可以正常工作。不要忘记稍后在main()中删除它。既然修改了原始指针,请保存它:

int *arr = add5ToEveryElement(noArr, size);
int *org = arr;
// Rest of the code

//Finally

 delete[] org;

从函数返回数组通常被认为是错误的

除非你必须有一个“新”数组,否则我建议C和C++中的典型情况是修改输入数组。如果调用函数想要有两个单独的数组,那么它可以通过自己的拷贝来完成。或者,你可以编写代码,使两个数组传递到你的函数中,例如

void add5ToEveryElement(int arr[], int arr2[], int size)
{
    for(int i=0; i<size; i++)
    {
        arr2[i] = arr[i] + 5;
        cout<<theArray[i]<<endl;
    }
}
void add5ToEveryElement(int-arr[],int-arr2[],int-size)
{

对于(inti=0;i这是完美的代码

# include <conio.h>
# include <iostream>
using namespace std;

int * add5ToEveryElement(int arr[], int size)
{
    int *theArray = new int[5];
    for(int i=0; i<size; i++)
    {
        theArray[i] = arr[i] + 5;
        cout<<theArray[i]<<endl;
    }
    return theArray;
}

void main()
{
    const int size = 5;
    int noArr[size];
    for(int i=0; i<size; i++)
    {
        noArr[i] = i;
    }
    int *arr = add5ToEveryElement(noArr, size);
    int *p = arr;
    cout<<endl;cout<<endl;
    for(int i=0; i<size; i++)
    {
        cout<<arr[i]<<endl;
    }
    cout<<endl;cout<<endl;cout<<endl;cout<<endl;
    for(int i=0; i<size; i++)
    {
        cout<<*arr<<endl;
        *arr++;
    }
    getch();
    delete[] p;
}
#包括
#包括
使用名称空间std;
int*add5ToEveryElement(int arr[],int size)
{
int*theArray=newint[5];

对于(int i=0;i@Mato不,先生,这不是重复的这是我面临的问题,搜索没有帮助我解决这是同一个问题。您正在返回指向自动(基于堆栈)的指针那个家伙没有像我一样使用索引是更新版本,不是重复版本:P@Asadullah你不使用
std::vector
代替数组有什么原因吗?@jogojapan没有,先生没有任何原因,但我正在教某人数组是如何工作的,以及数组是如何传递到函数和从函数返回的:)int*theArray=newint[5];这不是让它成为本地的???@Asadullah不。它是堆分配的数组,在
显式删除它之前将一直处于活动状态。这就是为什么我更新以释放main中的内存。你完全正确。现在关于内存泄漏,我应该怎么做?我必须在main的末尾写delete数组?或者什么?谢谢大家的帮助.最后一件事,内存泄漏如何损坏我的系统,或者如果内存泄漏会发生什么??
# include <conio.h>
# include <iostream>
using namespace std;

int * add5ToEveryElement(int arr[], int size)
{
    int *theArray = new int[5];
    for(int i=0; i<size; i++)
    {
        theArray[i] = arr[i] + 5;
        cout<<theArray[i]<<endl;
    }
    return theArray;
}

void main()
{
    const int size = 5;
    int noArr[size];
    for(int i=0; i<size; i++)
    {
        noArr[i] = i;
    }
    int *arr = add5ToEveryElement(noArr, size);
    int *p = arr;
    cout<<endl;cout<<endl;
    for(int i=0; i<size; i++)
    {
        cout<<arr[i]<<endl;
    }
    cout<<endl;cout<<endl;cout<<endl;cout<<endl;
    for(int i=0; i<size; i++)
    {
        cout<<*arr<<endl;
        *arr++;
    }
    getch();
    delete[] p;
}