为什么c++ std向量段在赋值或调整大小时会出错?

Why would the C++ std vector segfault on assignment or resize?

本文关键字:调整 小时 出错 赋值 std c++ 向量 为什么      更新时间:2023-10-16

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

#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++相关的东西,但我仍然看到同样的问题。

有人见过这样的东西吗?什么好主意吗?

谢谢!

您在哪里构建和链接应用程序?用什么选择吗?如果要动态链接c++标准库,你可以很容易地遇到问题;c++标准库已经改变了几次,破坏了二进制兼容性,以及二进制兼容性可能受到的影响编译器选项。一般来说,你应该使用选项-static-libstdc++时,以避免这样的问题。(注意,对于系统来说,不是也是一样的)