【发布时间】:2015-02-08 15:12:00
【问题描述】:
我有一个简单的 C++ 代码,我将动态数组定义为:
std::vector<double>IPWeights;
然后将它传递给一个名为reference的函数,并带有一个引用(所以我改变了它的内容),例如:
void reference (std::vector<double> &IPWeights)
然后在我的主函数中,在我更改了数组内容后,我想打印它:
int size_weights=IPWeights.size();
for (int i=0; i<size_weights; i++)
{
std::cout<<IPWeights[i]<<std::endl;
}
但在屏幕上我只看到“segmentation fault 11”。
引用的位置如下所示:
void reference( std::vector<double> &IPWeights)
{
IPWeights[0]=0.4500;
IPWeights[1]=0.2648;
IPWeights[2]=0.2648;
IPWeights[3]=0.2648;
IPWeights[4]=0.2519;
IPWeights[5]=0.2519;
IPWeights[6]=0.2519;
}
感谢任何建议, 提前致谢。
【问题讨论】:
-
“有人知道这是为什么吗?” 似乎不是您实际显示的代码。请发一个minimal sample,它会重现问题。
-
将 int 更改为 size_t 以获得 size_weights。它可以解决您的问题。
-
@Sergey 谢谢,但没有帮助:(
-
Anyone knows why that is??很可能是由于您的代码中的错误。 -
这可能意味着
reference或您未向我们展示的其他代码正在尝试访问超出向量大小的元素(或者可能对于int来说太大了- 使用size_t或迭代器)。但是,从您向我们展示的代码中无法猜测为什么会发生这种情况。使用您的调试器或 Valgrind 之类的工具来准确查找段错误发生的位置。