TransWikia.com

Почему затираются массивы при копировании в С?

Stack Overflow на русском Asked by Juan Esteban on November 30, 2021

Я только изучаю программирование на C и столкнулся со следующей проблемой: в качестве упражнения я написал 3 немного отличающиеся функции, копирующие один массив другой. Однако после вызова 3-й функции, значения предыдущих скопированных массивов и исходного почему-то затираются (становятся вида {0.0, 0.0, 0.0, 0.0, 0.0}). Без её вызова всё работает правильно. Объясните, пожалуйста, почему это может происходить?
Вот код:

int main(void) {
    double source[5] = {1.1, 2.2, 3.3, 4.4, 5.5};
    double target1[5];
    double target2[5];
    double target3[5];
    
    copy_arr(target1, source, 5);    
    copy_ptr(target2, source, 5);
    copy_ptrs(target3, source, source + 5); // Проблема в этой функции
    return 0;
}

void copy_arr(double target[], double source[], int size) {
    for (int i = 0; i < size; i++) {
        target[i] = source[i];
    }
}

void copy_ptr(double *target, double *source, int size) {
    double * ptr = target;
    while (target - ptr < size) {
        *target++ = *source++;
    }    
}

void copy_ptrs(double *target, double *source, double *end_source) {
    while (target < end_source) {
        *target++ = *source++;
    }
}

One Answer

Может, надо

void copy_ptrs(double *target, double *source, double *end_source) {
    while (source < end_source) {
        *target++ = *source++;
    }
}

Сравнение указателей двух разных массивов вообще, насколько я помню, UB.

Но в вашем случае, похоже, простая невнимательность...

Answered by Harry on November 30, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP