Автор
|
Тема: Не инитилизируеться массив!!!
|
Vovan |
опубликован 29-12-2001 14:13 MSK
Не инитилизируеться последний элемент массива, может я дурак?:void main() { int *Chislo; Chislo = new int[50];//Здесь глючит! Chislo[50]=666; delete Chislo; } Обьясните почему?
|
Vovochka
|
опубликован 29-12-2001 14:19 MSK
Индексация массивов в С++ с нуля... Надобно так: sss[49]=чему нибудь; а не [50]. |
Vovan
|
опубликован 29-12-2001 14:21 MSK
А почему тогда: int Chislo[50]; Chislo[50]=666;Почему так всё работает, а то что с нуля начинаеться, это я и так знаю! |
Vovochka
|
опубликован 29-12-2001 14:30 MSK
А ВОТ ТАК НЕВЕРНО! "А почему тогда: int Chislo[50]; Chislo[50]=666;"Просто вам везет, что ячейки памяти, соответствующие Chislo[50] не являются критичными (они в стеке) и затирание чегото-там... не ведет к появлению глупого совета "....Обратитесь к разработчику" Оператор же new выделяет память где-то в куче и, поэтому неверная запись данных чаще приводит к появлению глупого совета, поскольку шанс, что вы "затрете" нужную переменную выше. Когда вы говорите ... выделить память для 50 элементов, то имеете Chislo[0],Chisloх[1]...Chislo[48],Chislo[49]. ВСЁ. 50 элементов. |
xKernel
|
опубликован 30-12-2001 05:48 MSK
Маленький пример: #include<iostream.h> void main() { int i1=10; int m[50]; m[50]=20; cout<<"i1="<<i1<<endl; } на экране будет: i1=20 вот почему работает... |
Valery
|
опубликован 30-12-2001 21:24 MSK
2Vovochka: и отчего же это массив в стеке? в стеке находится только указатель на этот массив, а сам массив явно оператором new[] размещен в куче. учите матчасть и с Новым годом! 2Vovan: компилятор действительно знает что ты запросил 50 элементов массива с номерами 0..49. 50-й элемен находится за его пределами, он честно тебе проинициализировал первые 50 (дебаг версия? :) 51 просто нет для него. |