История изменений
Исправление vodz, (текущая версия) :
Я спросил в чем неправ поповоду статической и динамической памяти. Просто жду когда скажут в где ж я неправильно понимаю.
Ладно. Допустим один раз, что вы просто тормозите.
Итак, статическая память:
int array1[5];
...
main()
{
static int array2[5];
}
Тут компилятор выделит по 5 ячеек каждому массиву, если в этих ... точек других переменных больше не объявляется, то с большой вероятностью эта память будет статически (то есть без изменения в процессе работы) располагаться рядом, вначале идут 5 int-а для array1, а потом сразу же для array2, то есть записывая array1[5]=1 вы тем самым пишите в 0-ю ячейку array2, а не расширяете array1.
Выделение памяти из стека с константным или вычисляемым размером expr:
foo()
{
int array3[expr];
}
Выделение памяти из кучи под массив с константным или вычисляемым размером:
foo()
{
int *A=new int[expr];
}
А теперь сравните с вашим первым постом. Вы выделили память на 5 ячеек, а используете больше. Не надо путать разные языки, там где массивы самостоятельно расширяются, там и предварительного выделения то как правило нет.
Исходная версия vodz, :
Я спросил в чем неправ поповоду статической и динамической памяти. Просто жду когда скажут в где ж я неправильно понимаю.
Ладно. Допустим один раз, что вы просто тормозите.
Итак, статическая память:
int array1[5];
...
main()
{
static int array2[5];
}
Тут компилятор выделит по 5 ячеек каждому массиву, если в этих ... точек других переменных больше объявляется, то с большой вероятностью эта память будет статически (то есть без изменения в процессе работы) располагаться рядом, вначале идут 5 int-а для array1, а потом сразу же для array2, то есть записывая array1[5]=1 вы тем самым пишите в 0-ю ячейку array2, а не расширяете array1.
Выделение памяти из стека с константным или вычисляемым размером expr:
foo()
{
int array3[expr];
}
Выделение памяти из кучи под массив с константным или вычисляемым размером:
foo()
{
int *A=new int[expr];
}
А теперь сравните с вашим первым постом. Вы выделили память на 5 ячеек, а используете больше. Не надо путать разные языки, там где массивы самостоятельно расширяются, там и предварительного выделения то как правило нет.