2017-03-20 11 views
-2

私はこの問題を解決しようとしている:https://www.hackerearth.com/practice/data-structures/trees/binary-and-nary-trees/practice-problems/algorithm/comrades-ii-6/C++無効なポインタ

私は、アルゴリズムが正しいとかなり確信しているが、私は提出で無効なポインタエラーを取得しています。 私はエラーを見つけようとしてきましたが、終わりはありません。

#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; 
} 

誰かが私を助けることができれば、私は非常に感謝: は、ここでは、コードです。私は一種の不満を感じています。

EDIT:nが大きい場合、エラーが発生しているようです。

+2

whats 'invalid pointer error'? – pm100

+2

私の助言は、IDEを備えたシステムでこれを開発し、デバッガを使用することです。 – drescherjm

+1

ベクトルを作成した直後の 'resize(0)'のポイントは何ですか? – Arash

答えて

2
for(int i = 0; i < n+1; i++){ 
    struct node *temp = (node *)malloc(sizeof(node)); 
    temp->value = i; 
    temp->children.resize(0); 

あなたはそうあなたがresizeを呼び出すためにはvectorオブジェクトを持っていないtemp->childrenを構築することはありません。明らかな問題は、mallocnewに変更することです。

+0

ありがとう、問題は修正されています。 – ghostspeed

+0

私は自分でC++を学んでいます。私はもっと正式な厳格なものを読む必要があると思います。助言がありますか? – ghostspeed

+1

あなたがすでに知っていることを知らずに言うのは難しいです。しかし、間違いなくpre-C++ 11の学習は気にしないでください。 'unique_ptr'のようなことを学び、RAIIを学びます。 –

関連する問題