有没有其他方法可以做到这一点?目前我是这样使用的:
for( i=0;i<PU_number;i++)
{
for( j=0;j<=time_slots;j++)
myMatrix.tempVec.push_back(0.0);
myMatrix.value.push_back(myMatrix.tempVec);
myMatrix.tempVec.clear();
}
但是,这对我来说并没有用。有时候我需要更改向量中特定的地址,比如myMatrix.tempVec[1][4]
。当我像这样做:
myMatrix.value[i][j]=value;
这会损坏内存,我会收到 SIGABRT
、SIGSESV
等很多类似的东西。当我这样做时,valgrind 也会变得疯狂。但我需要一个适当的方式来解决它。
编辑:我按照你们的建议做了:
myMatrix.value.resize(PU_number);
for( i=0;i<PU_number;i++)
myMatrix.value[i].resize(time_slots);
接下来:
for( i=0;i<PU_number;i++)
{
for( j=0;j<time_slots;j++)
{
for( k=0;k<number_of_packets;k++)
{
double r=((double) rand() / (RAND_MAX));
for( x=myMatrix.mat[i][k];x<=myMatrix.mat[i][k]+myMatrix.len[i][k];x++)
myMatrix.value[i][x]=r;
}
}
}
我在valgrind中又遇到了"Invalid write of size 8"。
for( x=myMatrix.mat[i][k];x<=myMatrix.mat[i][k]+myMatrix.len[i][k];x++)
循环对我来说没有太多意义。 - πάντα ῥεῖ