C++ doesn’t take kindly to dynamic arrays. You can’t just plug a variable into some brackets and expect to make an array whatever size you want. There are technical reasons for this–compile time code v. run time code–but at the end of the day, it just isn’t happening.
However, it wouldn’t be a very useful language if there wasn’t some way to dynamically create arrays, so if you want to do it, you’re going to have to play with pointers. Doubly so (pun wholly and completely intended) for 2D arrays.
int size = 10; int dyn_array1[size]; // this won't work :( int *dyn_array2; dyn_array2 = new int [size]; // but this will! now we effectively have an array with 10 slots // as always, it is useful to think of 2d arrays as an array of arrays int **dyn_array3; // note that we are pointing to a pointer. don't worry, i barely understand it myself dyn_array3 = new int * [size]; // the dynamic array we just created is also a pointer, allowing us to stuff arrays in our arrays for (int y = 0; y < size; y++) { dyn_array3[y] = new int [size]; // making each of our arrays into an array itself } // and now we have a 10x10 dynamically created array // of course you can use any variable you want for size, and you can use a different variable for each dimension delete [] dyn_array2; // deleting the original dynamic array for (int i = 0; i < size; i++) { // delete it as you created it... delete [] dyn_array3[i]; // one at a time } delete [] dyn_array3; // and then the whole shebang
It looks simple, but discovering this nearly killed me. If only I could genuinely wrap my head around pointers… I would recommend that to anyone who wants to be a better programmer than I.
Leave a Comment