【发布时间】:2015-04-07 12:30:59
【问题描述】:
还有办法吗?目前我是这样使用的:
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 中再次收到“大小为 8 的无效写入”。
【问题讨论】:
-
使用 valgrind 的道具。首先修复它所识别的内容。
-
@WhozCraig 就是不接受我上面说的方法。它多次显示“大小为 8 的无效写入”。
-
@Whcrs 你的
for( x=myMatrix.mat[i][k];x<=myMatrix.mat[i][k]+myMatrix.len[i][k];x++)循环对我来说没有多大意义。 -
我知道。很难理解。即使我不记得我做了什么:) 但我可以告诉你,当我使用我在原始消息中告诉的第一种方法时,我在 valgrind 中没有错误。我只记得,它是正确的。
标签: c++ arrays c++11 vector variable-assignment