Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.10.2018, 22:27   #1
Sinli
Пользователь
 
Регистрация: 10.09.2018
Сообщений: 43
По умолчанию Помогите разобраться с указателями.

Добрый день. Изучаю сейчас указатели. Подскажите, пожалуйста, что не так в данном коде:

По заданию, я должен скопировать с помощью функции элементы массива с 3 по 5 в массив, состоящий из трех элементов.
Код:
#include <stdio.h>
void copy (int *, int *, int *);
int main (void)
{
        int number[7] = {1,2,3,4,5,6,7};
        int array[3];
        copy (number, array, array + 3);
        printf("array\n");
        for (int i = 0; i < 3; i++)
                printf("%d ", array[i]);
        putchar ('\n');
        return 0;
}
void copy (int *ptr1, int *ptr2, int *end)
{
        for (int j = 0; ptr2 < end; j++)
                *(ptr2 + j) = *(ptr1 + 2 + j);
        return;
}
Компилятор пишет Segmentation fault (core dumped).

Спасибо.
Sinli вне форума Ответить с цитированием
Старый 04.10.2018, 22:38   #2
New man
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 774
По умолчанию

Цитата:
Сообщение от Sinli Посмотреть сообщение
ptr2 < end
Это условие всегда ложно, так как ты меняешь только j.
Бесконечный цикл, в результате которого твоя программа пытается читать из/писать в адрес памяти, который принадлежит другому процессу, за что получает по рукам от операционной системы.
a.k.a. Angelicos Phosphoros
Мой сайт
New man вне форума Ответить с цитированием
Старый 04.10.2018, 22:47   #3
Sinli
Пользователь
 
Регистрация: 10.09.2018
Сообщений: 43
По умолчанию

Цитата:
Сообщение от New man Посмотреть сообщение
Это условие всегда ложно, так как ты меняешь только j.
Бесконечный цикл, в результате которого твоя программа пытается читать из/писать в адрес памяти, который принадлежит другому процессу, за что получает по рукам от операционной системы.
oh, god. i'm dumb.
Переделал
Код:
#include <stdio.h>
void copy (int *, int *, int *);
int main (void)
{
        int number[7] = {1,2,3,4,5,6,7};
        int array[3];
        copy (number, array, array + 3);
        printf("array\n");
        for (int i = 0; i < 3; i++)
                printf("%d ", array[i]);
        putchar ('\n');
        return 0;
}
void copy (int *ptr1, int *ptr2, int *end)
{
        for (int j = 0; ptr2 + j < end; j++)
                *(ptr2 + j) = *(ptr1 + 2 + j);
        return;
}
Все заработало.
Благодарю.
Sinli вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите пожалуйста разобраться с указателями? седьмой Общие вопросы C/C++ 20 18.04.2017 07:26
помогите разобраться с указателями С++ sasha_14-88 Общие вопросы C/C++ 1 07.12.2014 10:39
Помогите разобраться с указателями igole Общие вопросы C/C++ 1 28.04.2013 16:47
Не могу разобраться с указателями FRATER1234 Общие вопросы C/C++ 7 13.10.2011 11:23
Товарищи, помогите разобраться с указателями scibern Общие вопросы C/C++ 7 11.01.2009 12:28