2015-02-07 2 views
2

어쨌든 할 수 있습니까? 현재 다음과 같이 사용하고 있습니다.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 미친 가져옵니다. 하지만 적절한 방법이 필요합니다.

편집 : 다음

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의 잘못된 쓰기"를 가지고 너희들이 말을했다.

+0

valgrind 사용을위한 도구. 그것이 무엇을 식별 고정하여 시작합니다. – WhozCraig

+0

@WhozCraig 그것은 위에서 말한 방법을 받아들이지 않습니다. 그것은 "크기 8의 잘못된 쓰기"를 여러 번 말합니다. –

+0

@Whcrs _ _for (x = myMatrix.mat [i] [k]; x <= myMatrix.mat [i] [k] + myMatrix.len [i] [k]; x ++)'_ loop doesn ' 나에게 많은 의미가있다. –

답변

2

인덱스로 값에 액세스하기 전에 행렬의 크기를 올바르게 설정하는 데 사용할 수있는 std::vector::resize() 함수가 있습니다. 여기

는 현재와 같은 표준 : : 벡터> 을 사용할 수 있습니다

myMatrix.resize(PU_number); 
for(i=0;i<PU_number;i++) { 
    myMatrix[i].resize(time_slots); 
    for(j=0;j<=time_slots;j++) 
     myMatrix[i][j] = 0.0; 
} 
+0

2D 배열과 같은 값을 할당 할 수 있습니까? –

+0

@Whcrs 벡터의 크기를 알기 쉽게 설정할 수 있습니다. 링크 된 참조 문서를 읽으십시오. –

+0

나는 그것을 안다. 그리고 나는 그것을 지금했다. Valgrind가 다시 미쳤습니다. –

1

작은 샘플입니다 : 내가 다른 사람을 포함 크기 (10)의 벡터를 만들

#include <vector> 
#include <iostream> 
int main() 
{ 
    std::vector<std::vector<int> > vec; 
    vec.resize(10); 
    for (unsigned int i = 0 ; i < vec.size(); ++i) 
    { 
     vec[i].resize(10); 
    } 
    vec[1][4] = 3; 
    vec[1].push_back(5) 
    std::cout << "vec[1][4] = " << vec[1][4] << std::endl; 
    std::cout << "vec[1][10] = " << vec[1][10] << std::endl; 
    return (0); 
} 

을 크기 (10)의 벡터; 참고 : std :: vector>를 사용하여 크기를 가져 오려면 resize를 사용해야하지만 크기를 추가하려면 vec [i] .push_back (5);

+0

'vec [1] [10]'범위를 벗어납니다. –

+0

아니요. push_bask가 1을 추가 할 것이기 때문에 답을했기 때문에 시도했습니다. –