I am trying to print an array created inside the class initializer. I have tried a number of ways but my findings are that I have to use pointers for this problem. The code:
#include <iostream>
// arr.h
class Arr
{
private:
const int sizeVertical;
const int sizeHorizontal;
int *ptr;
public:
Arr(int sizeVertical, int sizeHorizontal);
void Init();
void Print();
};
// arr.cpp
Arr::Arr(int _sizeVertical, int _sizeHorizontal)
: sizeVertical(_sizeVertical),
sizeHorizontal(_sizeHorizontal)
{
int arr2d[sizeVertical][sizeHorizontal];
ptr = &arr2d[0][0];
}
void Arr::Init()
{
for(int i=0; i<sizeVertical; i++)
{
for(int j=0; j<sizeHorizontal; j++)
{
*(ptr + i * sizeHorizontal + j) = i+j;
}
}
}
void Arr::Print()
{
for(int i=0; i<sizeVertical; i++)
{
for(int j=0; j<sizeHorizontal; j++)
{
std::cout<<*(ptr + i * sizeHorizontal + j)<<std::endl;
}
}
}
// main.cpp
int main()
{
Arr test(4,3);
test.Init();
test.Print();
}
Inside the method (Init) where I defined the array I can also print the array in the same way as used in the method (Print). But when trying to print the array in a different method the output looks very strange. The output:
0
22025
955388640
32767
10
0
-1247975061
32668
1
3
-1549041632
22025
Any ideas?