3

セグメンテーション違反を生成する最小限のコードを次に示します。

#include<vector>
int main() {
  std::vector<double> a;
  a.resize(10);
  return 0;
}

明らかに、このコードに問題はありません。いくつかのシステムで問題なく実行しましたが、仕事用 PC でセグメンテーション エラーが発生します。

コードは、openSUSE 11.1 を実行しているシステムで g++ file.cpp を使用してコンパイルされます。古い OS であることはわかっていますが、アップグレードや再インストールはできません。私が権限を持っているのは、zypper (プログラムをインストールおよび削除するためのコマンド ライン ユーティリティ) だけです。

私の推測では、C++ ライブラリと関係があると思います。gcc/g++ および libstdc++ に関連して考えられるすべてのものを再インストールしようとしましたが、それでも同じ問題が発生します。

誰かが前にこのようなものを見たことがありますか? 何か案は?

ありがとう!

4

1 に答える 1

1

アプリケーションをどこでビルドしてリンクしましたか? そして、どのようなオプションがありますか?C++ 標準ライブラリを動的にリンクしている場合、簡単に問題が発生する可能性があります。C++ 標準ライブラリは、バイナリ互換性を損なうような方法で何度か変更されており、バイナリ互換性はコンパイラ オプションの影響を受ける可能性もあります。-static-libstdc++一般に、このような問題を回避するために、ビルド時にオプションを使用する必要があります。(動的リンクが優先されるシステム ライブラリについては、同じことが当てはまらないことに注意してください。)

于 2013-01-07T17:37:55.777 に答える