Вчера столкнулся с определенным казусом, я его сейчас опишу, хотелось бы прочитать ваши комментарии.
Возникла необходимость выделить такой массив: double Tmass[100000][10];
Как видите, памяти расходуется немало. Первоначально я делал так:
double **Tmass;
Tmass=new double *[tmax/deltat];
for(int i=0;i<X/deltax;i++)
Tmass[i]=new double [X/deltax];
Но врезультате этого начало происходить следующее. Выделение памяти прошло вробе бы нормально, без эксцессов. А вот затем при обращении к элементу Tmass[10][0] вылетает следующее послание
Unhandled exception in lab1.exe:0xC0000005:Access Violation
Я долго сморел на это сообщение и не сразу принял решение о статическом массиве. Т.е. я сделал так
double Tmass[100000][10];
И все беды улетучились.
Но эта ситуация породила во мне множество вопросов и поставила в неопределенный тупик.
Я понимаю, что с помощью оператора new память выделяется в куче, когда же Tmass[...][...] то в области данных (или это по-другому как-то называется?) и я так понимаю, эти участки памяти отличаются по объему, но
1) Почему ошибка произошла именно на элементе [10][0]? Я понимаю, если бы на элементе [90000][0], а то что-то слишком рано.
2)Бывало ли с кем-нибудь такое? И что же мне делать, если мне надо выделить динамически столько памяти? Может я что-то не так делал?
3)Мне приходилось испоьзовать вектор. Его размерность в 3 раза больше размерности массива Tmass. Я так понимаю, в векторе память тоже выделяется динамически, тогда почему с ним не возникает таких проблем, которые возникли с массивом.
Среда разработки Visual C++6.0.
Чувствую скоро появятся еще вопросы.