将数组地址从函数返回到指针(C ++)

时间:2014-02-27 06:36:24

标签: c++ arrays function pointers

我的家庭作业分配如下。如果我误读了什么。

  

“在一个称为PointerPractice.cpp文件,写一个函数调用concatArrays采用两个INT阵列   作为参数并连接两个阵列成第三较大的阵列,该函数创建。   该函数应该只使用指针算法(无数组符号),并应的指针返回到   新创建的数组。该函数应具有以下原型:   int * concatArray(int * pArray1,int size1,int * pArray2,int size2)。

     

在您的主要功能:

     
      
  1. 创建大小8和10的两个int阵列。
  2.   
  3. 使用循环,填充两个阵列与随机数。每一个随机数应该在   取值范围为0到9(含)。
  4.   
  5. 一些注释指示正在被打印哪个数组打印两个阵列。
  6.   
  7. 现在请concatArray与两个随机阵列和它们的尺寸作为参数。
  8.   
  9. 使用一个指针,保存到从concatArray返回的数组的引用。
  10.   
  11. 最后,打印返回的数组的一些注解指示,它的结果数组   从concatArray“。
  12.   

当我从功能本身打印时,它会正确打印出来。当我尝试在main中打印出来时,它会打印出每个地址的随机数字串,而不是0-9中的单个数字。

功能:

int* concatArray(int* pArray1, int size1, int* pArray2, int size2)
{
    int newArray[size1+size2];

    for(int i=0; i<size1+size2; i++)
    {
        if(i>size1)
        {
            *(newArray+i) = *(pArray2+i-size1);
        }

        else
        {
            *(newArray+i) = *(pArray1+i);
        }
    }

    cout<<endl;

    for(int i=0; i<size1+size2; i++)
    {
        cout << *(newArray+i)<<endl;
    }

    return newArray;

我在main中调用函数的地方:

ptrConcatArray = concatArray(myArray1, size1, myArray2, size2);

    cout <<endl;
    cout << "Resultant array:" << endl;

    for(int i=0; i<size1; i++)
    {
        cout << *(ptrConcatArray+i)<<endl;
    }

2 个答案:

答案 0 :(得分:2)

您正在返回指向本地数组的指针。函数返回时数组已被破坏,指针悬空(即没有指向任何有效的指针)。

你应该返回std::vector<int>,一个可正确复制的动态数组(与内置数组类型不同),并自动管理数组的内存。

如果你的作业禁止使用标准库(就像它说“使用指针”那样),那么你可能会返回一个指向分配有new的数组的指针:

int * newArray = new int[size1+size2];

这是一个坏主意,因为它会在调用程序上放置一个完成后删除数组的责任;但最糟糕的情况是内存泄漏,而不是内存损坏和返回悬空指针所得到的未定义行为。

答案 1 :(得分:0)

int newArray[size1+size2];是局部变量,它不能是返回值。

int newArray = new int[size1+size2];应该没问题。