質問をすることでしか得られない、回答やアドバイスがある。

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

ただいまの
回答率

90.34%

  • C++

    3764questions

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

  • MinGW

    53questions

    MinGW(ミン・ジー・ダブリュー)は GNUツールチェーンのWindows移植版です。 ランタイムライブラリと開発ツールで構成されています。

  • g++

    13questions

    g++はGNUコンパイラコレクション(gcc)のC++コンパイラーです。

MinGWのg++とstd::vectorの相性(?)

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 483

C++初心者です。

MinGWのg++コンパイラを用いてC++のプログラミングをしているのですが、プログラム中で一回でもvectorを用いると出力に何も表示されなくなってしまいます。vectorを1つでも宣言した時点で駄目になります。コンパイル・実行は何の問題もなく通ります。自分の書いたコードが間違っているのかもしれないと思い、std::vectorを用いた簡単なプログラムをネットからいくつか引っ張ってきてそのまま実行してみましたが、同様に何も出力されませんでした。

g++とstd::vectorの相性が悪いのでしょうか?

[追記]

1.) g++のバージョンは以下の通りです.

g++ --version
g++.exe (MinGW.org GCC-6.3.0-1) 6.3.0
Copyright (C) 2016 Free Software Foundation, Inc.

2.) git bash上でコンパイル(MinGW/bin/g++.exe hoge.cpp)、実行(./a.exe)しています.

3.) 実行したプログラムは以下の通りです.シェルソート(http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ALDS1_2_D)を行うプログラムになります.

#include<cstdio>
#include<algorithm>
#include<vector>
using namespace std;

long long cnt;
int l;
int A[1000000];
int n;
vector<int> G;

void insertionSort(int A[], int n , int g){
    for(int i = g; i < n; i++){
        int v = A[i];
        int j = i-g;
        while(j >= 0 && A[j] > v){
            A[j+g] = A[j];
            j -= g;
            cnt++;
        }
        A[j+g] = v;
    }
}

void shellSort(int A[], int n){
    int h = 1;
    while(h <= n){
        G.push_back(h);
        h = 3*h + 1;
    }

    for(int i = G.size()-1; i >= 0; i--){
        insertionSort(A, n, G[i]);
    }
}

int main(){
    scanf("%d" , &n);
    for(int i = 0; i < n; i++){
        scanf("%d" , &A[i]);
    }

    cnt = 0;
    shellSort(A,n);

    printf("%d\n", G.size());
    for(int i = G.size()-1; i >= 0; i--){
        printf("%d\n",G[i]);
    }

    for(int i = 0; i < n; i++){
        printf("%d\n", A[i]);
    }

    return 0;
}

4.) プログラムを引っ張ってきたサイトはC++の日本語リファレンス(https://cpprefjp.github.io/reference/vector.html)です.

5.) 今cmd.exe上で同様にコンパイル・実行してみたところ、実行時に

プロシージャエントリポイント__gxx_personality_v0がダイナミックライブラリ(a.exeのPATH)から見つかりませんでした。


とのエラーダイアログが出ました.

今のところ考えつく情報はこれくらいです.よろしくお願いします.

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • kazto

    2018/04/16 15:00

    まずは、ご自身の作業内容が適切かを疑いましょう。コンパイルしたソース、コンパイル時のコマンドおよびオプションを追記してください。

    キャンセル

  • metamorphosis

    2018/04/16 15:22

    反応ありがとうございます。現時点で思いつく限りの情報を追記しました。他にも必要な情報がありましたら教えていただけると嬉しいです。よろしくお願いいたします。

    キャンセル

回答 3

checkベストアンサー

+5

もしかして、scanf入力前にhello worldが表示されない事を指してます?

main関数冒頭にsetvbuf(stdout, 0, _IONBF, 0);でも仕込んでおけばいいと思いますよ

git bashとMinGWで想定するlibstdc++.dllのバージョンが違います。
ビルド(リンク)時に-staticを指定するか
git bashでMinGW使うのやめてPATHにMinGW\binを入れる
もしくは、git bash+MinGWをやめてMSYS2にしましょう

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/04/16 15:28 編集

    このprintf("hello world")はvectorの宣言により出力が表示されなくなった後に、出力の確認のために付け足したものです。ややこしいので問題文のソースコードから削除したいと思います。ごちゃごちゃしてしまいすみません。

    キャンセル

  • 2018/04/16 15:39

    scanfによる入力待ちに入ることは分かると思うんだけど
    何か入力した結果、表示されずにシェルに戻る
    という事でいいのですか?

    キャンセル

  • 2018/04/16 15:41 編集

    入力をinput.txtに予め入れておいて、
    ./a.exe < input.txt
    と実行しています。何も表示されずにシェルに戻ります。

    今試しに入力を入れずにただ
    ./a.exe
    と実行したところ、入力待ちにならずにシェルに戻ってしまいました。mainが捕捉されてないのでしょうか??

    キャンセル

  • 2018/04/16 15:52 編集

    実は起動できてないのにgit bashあたりが握りつぶしてるんじゃないかと疑いたくなる挙動ですね…
    (もしくは起動するファイルがコンパイルしたものと違う)
    g++ -v ソースファイル
    でコンパイルした時にでるメッセージ全文出せますか?
    ついでに、単純なハローワールドは動くのでしょうか?

    キャンセル

  • 2018/04/16 16:01

    メッセージ全文です。
    Using built-in specs.
    COLLECT_GCC=C:\MinGW\bin\g++.exe
    COLLECT_LTO_WRAPPER=c:/mingw/bin/../libexec/gcc/mingw32/6.3.0/lto-wrapper.exe
    Target: mingw32
    Configured with: ../src/gcc-6.3.0/configure --build=x86_64-pc-linux-gnu --host=mingw32 --with-gmp=/mingw --with-mpfr=/mingw --with-mpc=/mingw --with-isl=/mingw --prefix=/mingw --disable-win32-registry --target=mingw32 --with-arch=i586 --enable-languages=c,c++,objc,obj-c++,fortran,ada --with-pkgversion='MinGW.org GCC-6.3.0-1' --enable-static --enable-shared --enable-threads --with-dwarf2 --disable-sjlj-exceptions --enable-version-specific-runtime-libs --with-libiconv-prefix=/mingw --with-libintl-prefix=/mingw --enable-libstdcxx-debug --with-tune=generic --enable-libgomp --disable-libvtv --enable-nls
    Thread model: win32
    gcc version 6.3.0 (MinGW.org GCC-6.3.0-1)
    COLLECT_GCC_OPTIONS='-v' '-shared-libgcc' '-mtune=generic' '-march=i586'
    c:/mingw/bin/../libexec/gcc/mingw32/6.3.0/cc1plus.exe -quiet -v -iprefix c:\mingw\bin\../lib/gcc/mingw32/6.3.0/ 12D.cpp -quiet -dumpbase 12D.cpp -mtune=generic -march=i586 -auxbase 12D -version -o C:\Users\foo\AppData\Local\Temp\cccCe02V.s
    GNU C++14 (MinGW.org GCC-6.3.0-1) version 6.3.0 (mingw32)
    compiled by GNU C version 6.3.0, GMP version 6.1.2, MPFR version 3.1.5, MPC
    version 1.0.2, isl version 0.15
    warning: MPC header version 1.0.2 differs from library version 1.0.3.
    GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
    ignoring nonexistent directory "c:\mingw\bin\../lib/gcc/mingw32/6.3.0/../../../../mingw32/include"
    ignoring duplicate directory "c:/mingw/lib/gcc/../../lib/gcc/mingw32/6.3.0/include/c++"
    ignoring duplicate directory "c:/mingw/lib/gcc/../../lib/gcc/mingw32/6.3.0/include/c++/mingw32"
    ignoring duplicate directory "c:/mingw/lib/gcc/../../lib/gcc/mingw32/6.3.0/include/c++/backward"
    ignoring duplicate directory "c:/mingw/lib/gcc/../../lib/gcc/mingw32/6.3.0/include"
    ignoring duplicate directory "/mingw/lib/gcc/mingw32/6.3.0/../../../../include"
    ignoring duplicate directory "c:/mingw/lib/gcc/../../include"
    ignoring duplicate directory "c:/mingw/lib/gcc/../../lib/gcc/mingw32/6.3.0/include-fixed"
    ignoring nonexistent directory "c:/mingw/lib/gcc/../../lib/gcc/mingw32/6.3.0/../../../../mingw32/include"
    ignoring duplicate directory "/mingw/include"
    #include "..." search starts here:
    #include <...> search starts here:
    c:\mingw\bin\../lib/gcc/mingw32/6.3.0/include/c++
    c:\mingw\bin\../lib/gcc/mingw32/6.3.0/include/c++/mingw32
    c:\mingw\bin\../lib/gcc/mingw32/6.3.0/include/c++/backward
    c:\mingw\bin\../lib/gcc/mingw32/6.3.0/include
    c:\mingw\bin\../lib/gcc/mingw32/6.3.0/../../../../include
    c:\mingw\bin\../lib/gcc/mingw32/6.3.0/include-fixed
    End of search list.
    GNU C++14 (MinGW.org GCC-6.3.0-1) version 6.3.0 (mingw32)
    compiled by GNU C version 6.3.0, GMP version 6.1.2, MPFR version 3.1.5, MPC
    version 1.0.2, isl version 0.15
    warning: MPC header version 1.0.2 differs from library version 1.0.3.
    GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
    Compiler executable checksum: af09a87986453bf79da3565f33c7648f
    COLLECT_GCC_OPTIONS='-v' '-shared-libgcc' '-mtune=generic' '-march=i586'
    c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../../mingw32/bin/as.exe -v -o C:\Users\foo\AppData\Local\Temp\ccpP6sIA.o C:\Users\foo\AppData\Local\Temp\cccCe02V.s
    GNU assembler version 2.28 (mingw32) using BFD version (GNU Binutils) 2.28
    COMPILER_PATH=c:/mingw/bin/../libexec/gcc/mingw32/6.3.0/;c:/mingw/bin/../libexec/gcc/;c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../../mingw32/bin/
    LIBRARY_PATH=c:/mingw/bin/../lib/gcc/mingw32/6.3.0/;c:/mingw/bin/../lib/gcc/;c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../../mingw32/lib/;c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../
    COLLECT_GCC_OPTIONS='-v' '-shared-libgcc' '-mtune=generic' '-march=i586'
    c:/mingw/bin/../libexec/gcc/mingw32/6.3.0/collect2.exe -plugin c:/mingw/bin/../libexec/gcc/mingw32/6.3.0/liblto_plugin-0.dll -plugin-opt=c:/mingw/bin/../libexec/gcc/mingw32/6.3.0/lto-wrapper.exe -plugin-opt=-fresolution=C:\Users\foo\AppData\Local\Temp\ccaeQwst.res -plugin-opt=-pass-through=-lmingw32 -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lmoldname -plugin-opt=-pass-through=-lmingwex -plugin-opt=-pass-through=-lmsvcrt -plugin-opt=-pass-through=-ladvapi32 -plugin-opt=-pass-through=-lshell32 -plugin-opt=-pass-through=-luser32 -plugin-opt=-pass-through=-lkernel32 -plugin-opt=-pass-through=-lmingw32 -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lmoldname -plugin-opt=-pass-through=-lmingwex -plugin-opt=-pass-through=-lmsvcrt -Bdynamic -u ___register_frame_info -u ___deregister_frame_info c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../crt2.o c:/mingw/bin/../lib/gcc/mingw32/6.3.0/crtbegin.o -Lc:/mingw/bin/../lib/gcc/mingw32/6.3.0 -Lc:/mingw/bin/../lib/gcc -Lc:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../../mingw32/lib -Lc:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../.. C:\Users\foo\AppData\Local\Temp\ccpP6sIA.o -lstdc++ -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrt -ladvapi32 -lshell32 -luser32 -lkernel32 -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrt c:/mingw/bin/../lib/gcc/mingw32/6.3.0/crtend.o
    COLLECT_GCC_OPTIONS='-v' '-shared-libgcc' '-mtune=generic' '-march=i586'

    単純なhelloworldはきちんと出力されました。ついでに追記3.)のプログラムを
    ```
    Vector<int> G;
    ```
    及び関連する(Gを用いる)部分をすべてコメントアウトして実行した結果、ちゃんと入力待ちの状態になり、結果も出力されました。vectorを使えてないのでソートは行われない状態でですが...

    キャンセル

  • 2018/04/16 16:27

    あ、わかった 例外/スレッドモデルがgit bashとMinGWで違うんだ
    -static オプションつけてください

    キャンセル

  • 2018/04/16 16:54

    -static を付けたところ無事出力されました!
    親切に回答して頂きとても助かりました、ありがとうございました。
    なるべくgit bashで作業したいので、-staticオプションを今後も使っていきたいと思います。

    キャンセル

0

ん???
私もMinGW (g++) ですが、普通にstd::vector使えますよ?
もしかすると kaztoさんがおっしゃっているように、「使い方」が間違っている可能性もありますね。
情報は適切に提示しましょう。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/04/16 15:30

    反応ありがとうございます。現時点で思いつく限りの情報を問題文に追記させていただきました。何か間違っている箇所、不足している情報等があれば教えていただきたいです。よろしくお願いいたします。

    キャンセル

0

現象再現しました。
printfするときの出力バッファが即時に出力してくれていないことが原因でしょうかね。
どちらかと言うとMinGWのlibcの特性のような気がします。
std::vectorは本件には無関係と思います。
asmさんが仰るようにsetvbufする方法もありますし、以下のようにfflushする方法もあります。

    printf("hello world\n");
    fflush(stdout);

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/04/16 15:50

    今fflush(stdout)とsetvbufを両方試したのですが、何も出力されないままでした...

    キャンセル

  • 2018/04/16 15:59

    おや。。。
    ソースコード自体はコピペしたまんまでコンパイルでき、当方でも動作しました。
    (HelloWorldの文字列自体は、数字を入力後に出力されましたが。)
    コンパイルに失敗しているということは無さそうに思いますが、はて。。。
    どう切り分けしましょうかね。。。

    キャンセル

  • 2018/04/16 16:03

    困りました。。。
    asmさんの回答のところにも書いたのですが、追記3.)のプログラムのvectorに関する部分をすべてコメントアウトして実行してみたところ、問題なくscanfの入力待ちの状態になり、キーボードから入力を与えるときちんと出力されました。

    キャンセル

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

  • ただいまの回答率 90.34%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • C++

    3764questions

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

  • MinGW

    53questions

    MinGW(ミン・ジー・ダブリュー)は GNUツールチェーンのWindows移植版です。 ランタイムライブラリと開発ツールで構成されています。

  • g++

    13questions

    g++はGNUコンパイラコレクション(gcc)のC++コンパイラーです。