2017-10-02 5 views
-2

Je voudrais augmenter l'âge de 1 avec la fonction aging(), à partir de l'entrée de données de type struct.C++ struct tableau avec pointeur

Je voulais obtenir l'entrée de données comme un tableau de struct, et obtenir l 'argument struct comme type de pointeur, mais seulement à l'échec (l'âge est pas augmentée)

Quel est le problème?

#include <iostream> 
using namespace std; 
struct Person 
{ 
    int age; 
    double weight, height; 
}; 

void aging(Person* p); 

int main() 
{ 
    Person ps[2]; 
    for (int i=0; i<2; i++){ 
     cout <<"age :"; 
     cin >> ps[i].age; 
     cout <<"weight :"; 
     cin >> ps[i].weight; 
     cout <<"height :"; 
     cin >> ps[i].height; 
    } 

aging(&ps[2]); 

for (int i=0; i<2; i++){ 
    cout <<"age after1: "<<ps[i].age<<"weight after1: "<<ps[i].weight<<"height after1:"<<ps[i].height<<"\n"; 
    } 

return 0; 
} 

void aging(Person* p){ 
    p-> age++; 
} 
+1

'Quel est le problème?' C'est ce que je veux savoir! Est-ce une erreur du compilateur (si oui, pourquoi ne l'avez-vous pas inclus?) Est-ce l'exécution? (Si oui, pourquoi ne l'avez-vous pas décrit?) ... – John3136

+0

L'âge n'est pas augmenté –

+0

Si vous avez lancé ceci sous Valgrind, vous verrez bientôt que vous avez accès à une valeur hors plage dans '& ps [ 2] '. Envisagez de vieillir '& ps [1]' à la place. –

Répondre

1

On dirait que vous avez appelé aging sur un élément hors-limites du tableau ps. Vous déclarez ps d'avoir deux éléments, mais essayez d'accéder au troisième élément avec ps[2] (rappelez-vous, les tableaux C++ commencent à l'index 0). Si vous vouliez l'appeler sur le dernier élément du tableau, je pense que vous vouliez écrire aging(&ps[1]).