为什么C ++ std会在赋值时调整segfault或调整大小?

时间:2013-01-07 16:41:50

标签: c++ stl vector segmentation-fault opensuse

这是一个会产生分段错误的最小代码。

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

显然这段代码没有任何问题。我在几个系统上运行它没有问题,但它在我的工作PC上产生了分段错误。

在运行openSUSE 11.1的系统上使用g ++ file.cpp编译代码。我知道它是一个较旧的操作系统,但我不允许升级或重新安装。我唯一拥有权限的是zypper(用于安装和删除程序的命令行实用程序)。

我的假设是它与c ++库有关。我已经尝试重新安装我能想到的与gcc / g ++和libstdc ++相关的所有内容,但我仍然看到同样的问题。

有没有人见过这样的东西?有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

您在哪里构建和链接应用程序?有什么 选择?如果您正在动态链接C ++标准 库,你很容易遇到问题; C ++标准 库以破坏二进制的方式改变了几次 兼容性和二进制兼容性可能会受到影响 编译器选项也是如此。一般来说,你应该使用 构建时选项-static-libstdc++,以避免这种情况 问题。 (请注意,系统的为true 库,其中首选动态链接。)