我在代码中遗漏了某些东西,因此在c ++中函数返回指针的规则是什么?

时间:2019-06-19 03:35:16

标签: c++

我想创建一个函数,该函数生成大小为我输入的数组(填充有随机数),并且该函数返回所生成数组的第一个元素的地址。我尽可能没有任何错误或警告地编写了代码。但是在运行时,程序崩溃了。我尝试调试它,但是调试器也冻结了,什么也不做。我认为问题出在返回指针。请帮忙。

     #include<iostream>
     #include<cstdlib>

    using namespace std;

    int** the_gen(int num)
    {

          srand(1000);
          int *ptr= new int(num);
              int** const dptr=&ptr;

          for(int i=0;i<num;i++)
          {
           *ptr= rand();
            ptr++;      

          }
              return dptr;

    } 

    int main()
       {
          cout<<"Size of array:"<<endl;
          int size_of_array;
          cin>>size_of_array;

          int **a;

          a=the_gen(size_of_array);

          for(int i=0;i<size_of_array;i++)
         {
                 cout<<**a<<",";
                 a++;
         }

    }

2 个答案:

答案 0 :(得分:1)

您不必要地使用了int **。仅在创建int指针数组或int的2d数组时才需要使用它: 以下代码可以满足您的需求:

#include<iostream>
#include<cstdlib>

using namespace std;

int* the_gen(int num)
{

    srand(1000);
    //edit
    int *ptr = new int[num];
    int* const dptr = ptr;

    for (int i = 0; i < num; i++)
    {
        *ptr = rand();
        ptr++;

    }
    return dptr;

}

int main()
{
    cout << "Size of array:" << endl;
    int size_of_array;
    cin >> size_of_array;

    int *a;

    a = the_gen(size_of_array);

    for (int i = 0; i < size_of_array; i++)
    {
        cout << *a << ",";
        a++;
    }
}

答案 1 :(得分:0)

我认为返回指针总是一个坏主意,我们应该将内存指针作为参数,如下所示

void the_gen(int num, int** arry)
{
  srand(1000);
  int *ptr = new int[num];
  *arry = ptr;

  for (int i = 0; i < num; i++)
  {
    ptr[i] = rand();
  }    
}

int main()
{
  cout << "Size of array:" << endl;
  int size_of_array;
  cin >> size_of_array;

  int *a;
  the_gen(size_of_array, &a);

  for (int i = 0; i < size_of_array; i++)
  {
    cout << a[i] << ",";
  }
}