Здравствуйте, barmal, Вы писали:
B>Вот такой вот код, после компиляции g++ ом выпадает все время в корку.
B>
B>#include <stdio.h>
B>int main () {
B> static int arr [] = {1, 7, 4, 45, 31, 20, 57, 11};
B> int i; long sum;
B> for ( i = 0, sum = 0L;
B> i < (sizeof(arr)/sizeof(int)); i++ )
B> sum += arr[i];
B> printf ("Среднее значение = %ld\n", sum/8);
B> //А теперь то же саое, но через указатели
B> int *i1;
B> long *sum1;
B> for ( *i1=0, *sum1 = 0L;
B> *i1 < sizeof(arr)/sizeof(int); *i1 = *i1 + 1 )
B> *sum1 = *sum1 + *(arr+*i1);
B> printf ("Среднее значение через указатели = %ld\n", *sum1/8);
B> return 0;
B>}
B>
B>Кмпилирую и линкую так:
B>g++ -c test.cpp -g
B>g++ -o test test.o
B>Ничего не могу понять.
B>Объясните, что делается не правильно.
B>gdb показывает, что после объявления long *sum1, указатель ссылается на адрес 0х0
B>и после обращения к нему похоже программа и выдает сегментешион фаулт.
B>Иногда шаманством со строками удавалось сделать не выпадающий в корку бинарник, но это не выход.
B>Хочется понять, ведь что-то принципиально не правильно в этом коде.
B>Как правильно объявлять и инициализировать указатели?
int *i1 = new int;
long *sum1 = new long;