You can save yourself a million headaches by using actual strings instead of char arrays. Then you don't need to have 2D arrays, either... just have a 1D array of strings.
Or better yet, a vector of strings:
1 2 3 4 5 6
std::vector< std::string > cmdList;
cmdList.resize(10); // I want 10 strings in this array
cmdList[0] = "First string";
cmdList[1] = "Second string";
//...
What's even better is that vector and string internally handle the cleanup, so you don't have to use new/delete.
Will this allocate the memory needed with cmdList.resize(10)
In my constructors I am only supposed to allocate enough memory for the commands, I have another function (I have already written) that will initialize the strings with actual data.
Yes, resize() will allocate all the necessary memory.
Of course if you are using std::string, do not use strcmp, strcpy, etc functions, as those are only to be used with char arrays. With strings you don't need them.
I would try learning dynamic arrays as soon as possible if your vectors get large, because they get enormously inefficient, its not actually a limitless array, when it resizes it, it creates a new array transfers all the members up to the smallest size of the 2 arrays and uses the new array, so imagine transfering over 100 values, it gets bad when you get that high