Michau123
Michau123

Reputation: 1

2d arrays issue connected with passing a filled array

I'm working with c++ arrays and I found a problem. I can easily do the exercise using cin and filling array with for loop. But when I try to do it as filled array I got the error with too many initializer values. How to solve it?

#include <iostream>
using namespace std;

void func(int **arr, int row, int col)
{
   for (int i=0; i<row; i++)
   {
      for(int j=0 ; j<col; j++)
      {
        cout<<arr[i][j]<<" ";
      }
      printf("\n");
   }
}

int main()
{
    int row = 2;
    int colum = 2;

    int** arr = new int*[row];
    for(int i=0; i<row; i++)
    {
        arr[i] = new int[colum];
    }
    arr = {
        {1,2},
        {3,4}};
    func(arr, row, colum);

  return 0;
}

Upvotes: 0

Views: 30

Answers (1)

Vlad from Moscow
Vlad from Moscow

Reputation: 310930

arr is a pointer

int** arr = new int*[row];

So it may be initialized with a braced list containing only one (assignment) expression.

For the allocated array of two elements you could write for example

int** arr = new int*[row];
for(int i=0; i<row; i++)
{
    if ( i == 0 ) arr[i] = new int[colum] { 1, 2 };
    else arr[i] = new int[colum] { 3, 4 };
}

or

int** arr = new int*[row];
for(int i=0, value = 1; i<row; i++)
{
    arr[i] = new int[colum] { value++, value++ };
}

Pay attention to that you will need to free the dynamically allocated memory for the arrays.

Otherwise use the standard container std::vector<std::vector<int>> instead of the allocated dynamically arrays.

Upvotes: 1

Related Questions