从函数返回的C ++ 2D数组,错误:以非零状态退出

时间:2017-11-04 18:27:16

标签: c++ matrix multidimensional-array

此代码将3个参数作为输入。

输入:InitialValue,Row,Col

输出:2D数组

例如:输入1,3,3

输出:

1 2 3

4 5 6

7 8 9

我在哪里错了? 有没有更好的方法来修改我写的

#include<bits/stdc++.h>
using namespace std;
int** func(int s,int r,int c);


int main()
{
 int s,row,col;
 cin >> s >> row>> col;
 int** res;
 res = func(s,row,col);

for(int i=0;i<row;i++)
{
 for(int j=0;j<col;j++)
  {
  cout << res[i][j]<<" ";
  }
 cout << endl;
}
 return 0;
}

int** func(int s,int r,int c)
 {
  int** arr;
  for(int i=0;i<r;i++)
  {
   for(int j=0;j<c;j++)
   {
     arr[i][j]=s;
     s = s+1;
    }
  }
   return arr;
 }

2 个答案:

答案 0 :(得分:0)

你必须使用malloc for arr。

int **arr = (int **) malloc(r * sizeof(int **));
for(int k = 0; k<c; k++)
    arr[k] = (int *) malloc(sizeof(int))

然后你可以使用新的

int **arr = new int*[r];
for(int k = 0; k<c; k++)
    arr[k] = new int[c];

不要忘记使用删除。

答案 1 :(得分:0)

这样的事情怎么样?

#include <iostream>
#include <memory>

void FillArray(int start, int rows, int cols, std::unique_ptr<int[]> &result)
{
    int size = rows * cols;
    result = std::make_unique<int[]>(size);
    for (int i = 0; i < size; ++i)
        result[i] = start + i;
}

void PrintArray(int rows, int cols, std::unique_ptr<int[]> &arr)
{
    int size = rows * cols;
    for (int i = 0; i < size; ++i)
        std::cout << (i % cols == 0 ? "\n" : " ") << arr[i];

    std::cout << std::endl;
}

int main()
{

    int start, rows, cols;
    std::unique_ptr<int[]> arr;

    std::cout << "Enter params (start cols rows): ";
    std::cin >> start >> cols >> rows;

    FillArray(start, rows, cols, arr);
    PrintArray(rows, cols, arr);

    return 0;
}

例如:

Enter params (start cols rows): 10 10 5

10 11 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26 27 28 29
30 31 32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47 48 49
50 51 52 53 54 55 56 57 58 59