Okay so after reading all of this and getting (what I think is) a better understanding of pointers, I attempted my book's chapter's next practice problem:
Quote:
|
Write a function that takes 3 arguments, a length, width and height, dynamically allocates a 3-dimensional array with those values and fills the 3-dimensional array with multiplication tables. Make sure to free the array when you are done.
|
I'm just filling it with an incrementing value rather than multiplication tables
Here's the code I wrote. It has 2 main errors that repeat many times that the compiler picked up and I wouldn't be surprised if there were several more. It looks like a lot, but you'll quickly realize that it's very small, quick, and (hopefully) simple so please don't be put off by its size.
So what's wrong with this and how can I fix it?
Please ignore the fact that I made it a 3x? 2dimensional array instead of a 3dimensional array. I noticed that towards the end of writing this but that's not the main focus of the exercise so I'll fix that later.
Code:
//get 3 user-input values and make a 3dimensional array with those dimensions. Allocate that much memory.
#include <iostream>
using namespace std;
void setValues(int *a, int *b, int *c, int *arrayOne[], int *arrayTwo[], int *arrayThree[]);
void showValues(int *a, int *b, int *c, int *arrayOne[], int *arrayTwo[], int *arrayThree[]);
int main()
{
int firstNumber;
int *p_firstNumber = & firstNumber;
int secondNumber;
int *p_secondNumber = & secondNumber;
int thirdNumber;
int *p_thirdNumber = & thirdNumber;
//get the 3 sizes
cout << "Give me a length, width, and height!\n";
cout << "Length: "; cin >> firstNumber;
cout << "Width: "; cin >> secondNumber;
cout << "Height: "; cin >> thirdNumber;
//create the pointer version of the 3dimensional array
int **p_p_fullArray = new int[3];
int *p_firstArray = new int[firstNumber];
int *p_secondArray = new int[secondNumber];
int *p_thirdArray = new int[thirdNumber];
//set the 3 1dimensional arrays to the full array
p_p_fullArray[0] = & p_firstArray;
p_p_fullArray[1] = & p_secondArray;
p_p_fullArray[2] = & p_thirdArray;
//create normal variables for the 3dimensional array
int firstArray[firstNumber];
int secondArray[secondNumber];
int thirdArray[thirdNumber];
//set the 3 1dimensional pointers to the 3 1dimensional variables
p_firstArray = & firstArray;
p_secondArray = & secondArray;
p_thirdArray = & thirdArray;
//assign something to every cell in the array
setValues(int *p_firstNumber, int *p_secondNumber, int *p_thirdNumber, int *p_firstArray[], int *p_secondArray[], int *p_thirdArray[]);
//show the array (easy way to make sure the program worked)
cout << "\nCool thanks. Here's your array:" << endl;
showValues(int *p_firstNumber, int *p_secondNumber, int *p_thirdNumber, int *p_firstArray[], int *p_secondArray[], int *p_thirdArray[]);
//free the allocated memory and make sure the pointers don't grab on to anything random and cause issues
delete p_p_fullArray;
p_p_fullArray = NULL;
delete p_firstArray;
p_firstArray = NULL;
delete p_secondArray;
p_secondArray = NULL;
delete p_thirdArray;
p_thirdArray = NULL;
delete p_firstNumber;
p_firstNumber = NULL;
delete p_secondNumber;
p_secondNumber = NULL;
delete p_thirdNumber;
p_thirdNumber = NULL;
}
void setValues(int *a, int *b, int *c, int *arrayOne[], int *arrayTwo[], int *arrayThree[])
{
int value = 0;
for (int i = 0; i < a; i++)
{
*arrayOne[i] = value;
++value;
}
for (int j = 0; j < b; j++)
{
*arrayTwo[j] = value;
++value;
}
for (int k = 0; k < c; k++)
{
*arrayThree[k] = value;
++value;
}
}
void showValues(int *a, int *b, int *c, int *arrayOne[], int *arrayTwo[], int *arrayThree[])
{
cout << "first row: ";
for (int i = 0; i < a; i++)
{
cout << arrayOne[i] << " ";
}
cout << "\nsecond row: ";
for (int j = 0; j < b; j++)
{
cout << arrayTwo[j] << " ";
}
cout << "\nthird row: ";
for (int k = 0; k < c; k++)
{
cout << arrayThree[k] << " ";
}
}