🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

1330閲覧

c++で書いたコードでsegmentation errorが出てしまいます。

donkey

総合スコア24

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2019/12/05 05:59

競技プログラミングで自分の環境で実行しているのですが、そのコードがsegmentation errorで実行出来ません。
私としてはsegmentation errorが何か分かっているつもり(真に分かっているなら解決できるはずなのですが…)ではあります。しかし、そのミスが分からないので質問するに至りました。

以下に問題があるコードを示します。

//code.cpp #include <bits/stdc++.h> #include <cmath> #include <set> #include <cstdio> #include <vector> #include <iostream> #include <utility> #define fir first #define sec second #define get(n) scanf("%d",&n); #define gets(s) string s;cin >> (s); #define All(s) (c).begin(), (c).end() #define chmin(x, y) x = min(x, y); #define chmax(x, y) x = max(x, y); #define rep(i, j) for (int (i)=0;(i)<(j);(i)++) #define repk(i, j, k) for(int (i)=(j);(i)<(k);(i)++) #define dump(x) std::cout << #x << " = " << (x) << std::endl; #define debug(x) cout << #x << " = " << (x) << " (L" << __LINE__ << ")" << " " << __FILE__ << endl; using namespace std; typedef long long int ll; const int max_n = 2 * 1e5 + 1; const ll INF = 10241024; long double INFD = 100100100; vector<vector<int> > v(max_n); vector<pair<int, int> > q(max_n); int N ,Q; void input(){ cin >> N >> Q; dump(N);dump(Q); rep(i, N-1){ int a,b;cin >> a >> b; //dump(a);dump(b); v[a].push_back(b); } rep(i, Q){ int a, b;cin >> a >> b; q[i] = make_pair(a, b); } } void solve(){ input(); vector<int> counta(max_n, 0); rep(i, Q){ int p = q[i].fir;//codinate int x = q[i].sec;//value queue<int> q; counta[i] += x; rep(j,v[p].size()){ q.push(v[i][j]); } while(!q.empty()){ int k = q.front();q.pop(); //cout << "counta[" << k << "]is added " << x << endl; counta[k] += x; rep(l, v[k].size()){ q.push(v[k][l]); } } } for(int j=0;j<N;j++){ cout << counta[j] << endl; } return; } int main () { solve(); return 0; }

includeしているヘッダに違和感を感じた方は気にしないで下さい笑。自分でもそこは分かっています。)

他に開示すべき情報があれば、気軽に書いてください。
回答して頂ければ嬉しいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

rep(j,v[p].size()){ //←ここがpで… q.push(v[i][j]); //ここがiだけど,これはOK?

投稿2019/12/05 06:20

fana

総合スコア11990

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

donkey

2019/12/05 08:19

回答有難うございました。 指摘された箇所を修正したらAC出ました。本当に恥ずかしい…間違い探しみたいな質問で申し訳ないです。
guest

0

とりあえず、-g3オプション付きでコンパイルしてgdbで実行し
segvしている箇所を特定するといいでしょう。

投稿2019/12/05 06:19

asm

総合スコア15149

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

donkey

2019/12/05 08:25

回答およびアドバイス有難うございます。 Macで動作させているのでLLDBでデバッグする事にします(gdbの設定は面倒なので)。 もう間違い探しみたいな質問はしない様にします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問