Je suis en train de résoudre ce problème: https://www.hackerearth.com/practice/data-structures/trees/binary-and-nary-trees/practice-problems/algorithm/comrades-ii-6/pointeur invalide C de
Je suis sûr que l'algorithme est bon, mais je reçois des erreurs de pointeur non valide dans les mémoires. J'ai essayé de trouver l'erreur, mais sans fin. Voici le code:
#include <iostream>
#include <vector>
using namespace std;
struct node{
int value;
vector<struct node*> children;
};
void handshakes(int n, struct node *node, long long int &hs, long long int &fb, int height){
if((int)node->children.size() == 0){
hs += height-1;
fb += n - height;
}
else{
for(int i = 0; i < (int)node->children.size(); i++){
handshakes(n, node->children[i], hs, fb, height+1);
}
}
}
int main()
{
int T;
cin >> T;
for(int t = 0; t < T; t++){
int n;
cin >> n;
vector<struct node*> army;
army.resize(0);
for(int i = 0; i < n+1; i++){
struct node *temp = (node *)malloc(sizeof(node));
temp->value = i;
temp->children.resize(0);
army.push_back(temp);
}
int a;
for(int i = 0; i < n; i++){
cin >> a;
for(int j = 0; j < (int)army.size(); j++){
if(army[j]->value == i+1){
army[a]->children.push_back(army[j]);
break;
}
}
}
long long int hs = 0;
long long int fb = 0;
handshakes(n, army[0], hs, fb, 0);
cout << hs << " " << fb/2 << endl;
}
return 0;
}
Je serais très reconnaissant si quelqu'un pouvait me aider. Je suis un peu frustré.
EDIT: L'erreur semble se produire lorsque n est grand.
qu'est-ce qu'une «erreur de pointeur invalide»? – pm100
Mon conseil est de développer ceci sur un système avec un IDE et d'utiliser votre débogueur. – drescherjm
Quel est le point de 'resize (0)' juste après avoir créé un vecteur ?! – Arash