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++;
}
}
Может, надо
void copy_ptrs(double *target, double *source, double *end_source) {
while (source < end_source) {
*target++ = *source++;
}
}
Сравнение указателей двух разных массивов вообще, насколько я помню, UB.
Но в вашем случае, похоже, простая невнимательность...
Answered by Harry on November 30, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP