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

美丽的

我的作业分配在下面。万一我误读了一些东西。

“在名为PointerPractice.cpp的文件中,编写一个名为concatArrays的函数,该函数将两个int数组作为参数并将两个数组连接成该函数创建的第三个更大的数组。该函数应仅使用指针算术(无数组表示法),并且应返回指向新创建的数组的指针,该函数应具有以下原型:int * concatArray(int * pArray1,int size1,int * pArray2,int size2)。

在您的主要职能中:

  1. 创建两个大小为8和10的int数组。
  2. 使用循环,用随机数填充两个数组。每个随机数应在0到9(含)范围内。
  3. 打印两个数组并带有一些注释,以指示要打印哪个数组。
  4. 现在使用两个随机数组及其大小作为参数调用concatArray。
  5. 使用指针,保存对concatArray返回的数组的引用。
  6. 最后,在返回的数组上打印一些注释,表明它是concatArray的结果数组。”

当我从函数本身打印时,它可以正确打印。当我尝试在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;
    }
迈克·西摩

您正在返回一个指向本地数组的指针。函数返回时数组已被破坏,指针悬空(也就是说,未指向任何有效对象)。

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

如果您的分配禁止使用标准库(如它所说的“使用指针”),那么您也许可以返回一个指针,该指针指向分配有的数组new

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

这是一个坏主意,因为一旦完成,它将调用程序的责任放在了调用方上,以删除该数组。但是可能发生的最坏情况是内存泄漏,而不是返回悬挂指针会导致的内存损坏和未定义的行为。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

Related 相关文章

热门标签

归档