【发布时间】:2014-09-09 17:20:08
【问题描述】:
我有一个函数getfafr(N,n,twoq),它以std::vector<vector<vector> > > 的形式返回一个3 维张量fafr。它没有统一的大小(即fafr[i][j].size()对于不同的i,j等可能不同),这是使用push_back()实现的。
奇怪的是,以完全相同的参数运行函数会导致不同的张量;有时至少有些元素是胡言乱语。一个例子是在代码的不同点运行getfafr(12,3,1),一次给出fafr[2][0][10]=270,另一次给出fafr[2][0][10]=-6.88461e-309。
奇怪的是,如果我总是在使用std::cout 创建后将张量打印到屏幕上,问题就会消失。
我的感觉是,以这种方式使用push_back() 会导致内存问题,例如较早的数据被后来的数据覆盖等。这是函数:
vector<vector<vector<double> > > getfafr(int N, int n, int twoq) {
vector<vector<vector<double> > > fafr;
for(int nu=0;nu<n;nu++) {
fafr.push_back(vector<vector<double> >(twoq+nu+1));
for(int om=0;om<=twoq+nu;om++) {
for(int tmo=0;tmo<N-nu-twoq;tmo++) {
fafr[nu][om].push_back(bin(twoq+nu, om));
for(int i=N-tmo-nu-twoq;i<=N-1-tmo-om;i++) fafr[nu][om][tmo]*=i;
for(int i=tmo+1;i<=tmo+om;i++) fafr[nu][om][tmo]*=i;
}
}
}
return fafr;
}
【问题讨论】:
-
从使用
operator[]切换到使用at,我感觉问题会变得很明显。 -
嗯,不适合我。如果这就是你的意思,它没有给出
'std::out_of_range'错误? -
bin()返回什么? -
对不起,
bin是二项式系数
标签: c++ memory vector cout push-back