WWW.ИСХОДНИКИ.РУ cpp.sources.ru
java.sources.ru web.sources.ru soft.sources.ru
jdbc.sources.ru asp.sources.ru api.sources.ru

  Форум на исходниках
  C / C++ / Visual C++
  Не инитилизируеться массив!!!

СПРОСИТЬ  ОТВЕТИТЬ
профайл | регистрация | faq

Автор Тема:   Не инитилизируеться массив!!!
Vovan опубликован 29-12-2001 14:13 MSK   Click Here to See the Profile for Vovan   Click Here to Email Vovan  
Не инитилизируеться последний элемент массива, может я дурак?:

void main()
{
int *Chislo;
Chislo = new int[50];//Здесь глючит!
Chislo[50]=666;
delete Chislo;
}

Обьясните почему?

Vovochka опубликован 29-12-2001 14:19 MSK     Click Here to See the Profile for Vovochka  Click Here to Email Vovochka     
Индексация массивов в С++ с нуля... Надобно так: sss[49]=чему нибудь; а не [50].
Vovan опубликован 29-12-2001 14:21 MSK     Click Here to See the Profile for Vovan  Click Here to Email Vovan     
А почему тогда:
int Chislo[50];
Chislo[50]=666;

Почему так всё работает, а то что с нуля начинаеться, это я и так знаю!

Vovochka опубликован 29-12-2001 14:30 MSK     Click Here to See the Profile for Vovochka  Click Here to Email Vovochka     
А ВОТ ТАК НЕВЕРНО!
"А почему тогда:
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     Click Here to See the Profile for xKernel  Click Here to Email xKernel     
Маленький пример:
#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     Click Here to See the Profile for Valery  Click Here to Email Valery     
2Vovochka:
и отчего же это массив в стеке?
в стеке находится только указатель на этот массив, а сам массив явно оператором new[] размещен в куче. учите матчасть и с Новым годом!
2Vovan:
компилятор действительно знает что ты запросил 50 элементов массива с номерами 0..49. 50-й элемен находится за его пределами, он честно тебе проинициализировал первые 50 (дебаг версия? :) 51 просто нет для него.

СПРОСИТЬ  ОТВЕТИТЬ
Перейти:


E-mail | WWW.ИСХОДНИКИ.RU

Powered by: Ultimate Bulletin Board, Freeware Version 5.10a
Purchase our Licensed Version- which adds many more features!
© Infopop Corporation (formerly Madrona Park, Inc.), 1998 - 2000.