LloydUzari---If you have a debugger, step through it line by line. If not start throwing in lines like cout << "Here" << endl; to see how far your code gets before it bottoms out. Then you can start putting in lines to display a given variable to make sure it is being read/changed appropriately. This manual technique for debugging is a bit tedious, but it usually works, especially if you aren't comfortable with a debugger.
The code for creating a 2D array dynamically seems okay in your post. Sometimes the problem is as simple as making sure that you have the dimensions correctly. That is, are you sure data_length is the first size read in and data_width the second?