Je veux savoir pourquoi mon code donne une valeur modifiée de y [0] quand je ne le change nulle part explicitement. Je vous ai fourni la sortie de la liaison ci-dessous:Comportement indéfini: la valeur de l'élément de tableau change implicitement/illogiquement
code:
#include <iostream>
int main() {
std::cout << "Enter total number of values of x/y" << std::endl;
int n;
std::cin >> n;
double x[n];
double y[n];
double df[n - 1][n - 1];
std::cout << "Enter values of x:" << std::endl;
for (int i = 0; i < n; i++) {
std::cin >> x[i];
}
std::cout << "Enter values of y:" << std::endl;
for (int i = 0; i < n; i++) {
std::cin >> y[i];
}
std::cout << std::endl;
for (int i = 0; i < n; i++) {
df[i][0] = y[i + 1] - y[i];
}
std::cout << "value of y[0] before: " << y[0] << std::endl;
for (int j = 1; j < n - 1; j++) {
for (int i = 0; i < n; i++) {
df[i][j] = df[i + 1][j - 1] - df[i][j - 1];
}
}
std::cout << "value of y[0] after: " << y[0] << std::endl;
}
, il donne également une valeur stable de y [0] si j'allouer dynamiquement la mémoire en utilisant:
double* x = new double[n];
double* y = new double[n];
Je me suis référé à ce lien: Value of array member changes illogically, mais je n'ai pas pu obtenir une réponse claire sur la façon dont est cela arrive car il ne fournit pas de code (comme mentionné dans les commentaires).
Je veux savoir pourquoi cela se passe dans mon code avec des tableaux statiques et pas ceux alloués dynamiquement?
Lors de la dernière itération de votre boucle d'affectation 'df' vous avez' i == n - 1'. Cela signifie que vous accédez 'df [n-1] [0]' qui est un après la fin du tableau. Accéder à cet élément est un comportement indéfini et peut expliquer tout problème que vous rencontrez. –
'double x [n];' n'est pas le standard C++, quel compilateur utilisez-vous? – user463035818
Pire, quand 'i == n - 1', la dernière boucle accède à' df [n] ', qui est deux éléments hors limites. – chris