Вы создали двумерный массив, а не стандартный вектор.Массивы не хранят свою длину, поэтому вам нужно либо придумать способ сохранить длину, либо переключиться на другой тип контейнера хранения.
Вот пример, в котором количество оценок хранится в качестве первого элемента.массива для данного курса:
#include <iostream>
using namespace std;
int main()
{
int course, grades;
int** crsgrd;
// get inputs and asign grades
cout << "Enter number of courses: ";
cin >> course;
crsgrd = new int * [course];
for (int c = 0; c < course; c++) {
cout << "Enter number of grades: ";
cin >> grades;
crsgrd[c] = new int[grades + 1]; // extra cell for # of grades
crsgrd[c][0] = grades;
// start storing grades at cell [c][1] as the first cell has the length
for(int g = 1; g < grades+1; g++) {
cout << "Enter your grade: ";
cin >> crsgrd[c][g];
}
}
// print grade report
for(int c = 0; c < course; c++) {
cout<< "Course #" << c+1 << " grades:" << endl;
// use first element as limit for for loop.
// Be sure to print one more element as we have an extra cell
// at the end.
for(int g = 1; g < crsgrd[c][0] + 1; g++)
cout << crsgrd[c][g] << " ";
cout << endl;
}
// free the array
for(int i = 0; i < course; i++)
delete [] crsgrd[i];
delete [] crsgrd;
return 0;
}