0
У меня есть массив:Pass массив в качестве аргумента
int *BC_type_vel;
BC_type_vel = new int [nBou+1];
, и функцию:
void BC_update (const int type[], float X[]) {
for (int i=1; i<=nBou; ++i) {
if (type[i] == 1) {
std::cout << i << " " << type[i] << " " << BC_type_vel[i] << std:: endl;
for (int e=PSiS[i]; e<PSiE[i]; ++e) {
X[e] = X[elm[e].neigh[0]];
}
}
}
}
я называю это так:
BC_update(BC_type_vel,U);
Это дает выход as:
1 1 0
2 1 0
3 1 0
4 1 1
5 1 0
Итак, почему аргумент функции не копирует значения правильно?
Остерегайтесь того, чтобы массив в C начинался с позиции 0 (подвалы + 0). Вы попадаете в фальшивую память при своей функции. – Edu
@Edu: Это очень странный способ петли через массив и должен быть изменен, но он на самом деле не набрасывает его. Если вы посмотрите, как создается массив, он имеет элементы 'nBou + 1', и он перебирается через 1 в' nBou'. Теперь он не показывает нам, как он заполняет массив, поэтому я бы предположил, что это проблема. Я бы рекомендовал пометить это как C, но как на C++, вы должны просто использовать «вектор» и сделать вашу жизнь проще. –
@EdS. Это правда. Он просто растрачивает первый ряд, но не повреждает память. Я согласен, это просто C, а не C++. – Edu