выходим за рамки массива 347 или 15B
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
выходим за рамки массива 347 или 15B - 2009-03-10 03:32:07.353333
|
|
|
61.masquit
Сообщений: 64
Оценки: 0
Присоединился: 2009-02-13 12:49:23.920000
|
короч тут#include <conio.h>
#include <stdio.h>
void main(void)
{unsigned int a[]={1};
unsigned int *b,i;
for (i=0;i<5;i++)
{
b=&a[i]+i;
printf("a[%d]=%d\n",a[i],*b); }
a1=1 a0=347 a347=0 дальше нули. вопрос че это за 347?? почему не 0?..
|
|
|
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) у тебя будут некоторые проблемы
|
|
|
|
|