Есть ли все-таки сделать это? В настоящее время я использую вот так:Как назначить значения в 2D-вектор, как 2D-массив
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 становится сумасшедшим, когда я это делаю. Но мне нужен подходящий способ сделать это.
EDIT: Я сделал то, что вы, ребята сказали:
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;
}
}
}
И я получил "Invalid запись размером 8" снова в Valgrind.
Реквизиты для использования valgrind. Начните с определения того, что он идентифицирует. – WhozCraig
@WhozCraig Он просто не принимает метод, который я сказал выше. Он говорит «недействительная запись размера 8» много раз. –
@Whcrs Ваш _'for (x = myMatrix.mat [i] [k]; x <= myMatrix.mat [i] [k] + myMatrix.len [i] [k]; x ++) '_ loop doesn ' Для меня это очень важно. –