为啥 C++ 标准向量在分配或调整大小时会出现段错误? [关闭]
Posted
技术标签:
【中文标题】为啥 C++ 标准向量在分配或调整大小时会出现段错误? [关闭]【英文标题】:Why would the C++ std vector segfault on assignment or resize? [closed]为什么 C++ 标准向量在分配或调整大小时会出现段错误? [关闭] 【发布时间】:2013-01-07 16:41:50 【问题描述】:这是一个会产生分段错误的最小代码。
#include<vector>
int main()
std::vector<double> a;
a.resize(10);
return 0;
显然这段代码没有任何问题。我已经在几个系统上运行它没有问题,但它在我的工作电脑上产生了分段错误。
代码是在运行 openSUSE 11.1 的系统上使用 g++ file.cpp 编译的。我知道这是一个较旧的操作系统,但我不允许升级或重新安装。我唯一有权使用的是 zypper(用于安装和删除程序的命令行实用程序)。
我的假设是它与 c++ 库有关。我已经尝试重新安装所有我能想到的与 gcc/g++ 和 libstdc++ 相关的东西,但我仍然看到同样的问题。
以前有人见过这样的东西吗?有什么想法吗?
谢谢!
【问题讨论】:
除了操作系统严重损坏之外,想不出任何原因。 尝试重新启动您的系统?搞砸了 您是否考虑过使用调试器并找出崩溃的确切位置? 这个问题在 Windows 和 Unix 中都很常见(至少当你在 Unix 下使用 g++ 时——Sun CC 避免了它......通过维护一个极其过时的标准库接口)。libstdc++
的不同版本不兼容二进制(虽然我很惊讶看到 std::vector
的问题)。
@LightnessRacesinOrbit 我不知道。在 VC++ 10 之前的版本中,如果您不使用调试构建的默认选项,std::string
将会崩溃。不是系统的,只是在一些奇怪的功能上。
【参考方案1】:
您在哪里构建和链接应用程序?用什么
选项?如果您正在动态链接 C++ 标准
库,你很容易遇到问题; C++ 标准
库以破坏二进制的方式发生了多次更改
兼容性,和二进制兼容性可能会受到影响
编译器选项也是如此。一般来说,您应该使用
选项-static-libstdc++
构建时,避免这样的
问题。 (请注意,对于系统,不是
库,动态链接是首选。)
【讨论】:
以上是关于为啥 C++ 标准向量在分配或调整大小时会出现段错误? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Imagemagick 或 GraphicsMagick 在调整为较小尺寸时会增加我的 PNG 图像的 MB 大小?