Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

выходим за рамки массива 347 или 15B

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> выходим за рамки массива 347 или 15B
Имя
Сообщение << Старые топики   Новые топики >>
выходим за рамки массива 347 или 15B - 2009-03-10 03:32:07.353333   
61.masquit

Сообщений: 64
Оценки: 0
Присоединился: 2009-02-13 12:49:23.920000
короч тут#include &lt;conio.h&gt; #include &lt;stdio.h&gt; void main(void) {unsigned int a[]={1}; unsigned int *b,i; for (i=0;i&lt;5;i++) { b=&a[i]+i; printf("a[%d]=%d\n",a[i],*b); } a1=1 a0=347 a347=0 дальше нули. вопрос че это за 347?? почему не 0?..
Post #: 1
RE: выходим за рамки массива 347 или 15B - 2009-03-10 05:13:25.786666   
Denaturat

Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
quote:

ORIGINAL: 61.masquit

void main(void)


не может у функции main быть такой сигнатуры

quote:

ORIGINAL: 61.masquit

unsigned int a[]={1};


какой размер у твоего массива? по данному определнию - один sizeof int, а работать ты с ним пытаешься как с массивом из пяти элементов. кстати говоря, если ты напишешь так:

unsigned int a[5]={1};

то получишь массив, содержащий {1, 0, 0, 0, 0}, так как элементы массива, для которых не было задано значение при инициализации подобным образом, инициализируются нулями

quote:

ORIGINAL: 61.masquit

b=&a+i;


&a + i эквивалентно &*(a + i) + i эквивалентно a + i + i эквивалентно a + 2 * i

итого твоя строчка означает:

b = a + 2 * i;

вполне логично, что даже если бы для a была выделена (и заполнена) память на 5 sizeof int, при попытке разыменовать что-то вроде (a + 6) у тебя будут некоторые проблемы
Post #: 2
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> выходим за рамки массива 347 или 15B







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.