2011-08-01 3 views
2

배열에 코드를 사용했는데 vector로 바꿨고 다음과 같은 오류가 발생했습니다. (Linux에서)오류 : 벡터를 사용할 때 glibc가 감지되었습니다.

glibc detected *** double free or corruption 

glibc detected malloc memory corruption 

코드가 너무 길어서 여기에 붙여 넣을 수 없습니다. vector :

선언 :

 vector:vector<double>x;//i didnt define anysize for vector 

문제에 대해 어떻게 생각하십니까? ?
또한 벡터에서 iterator를 사용해야 할 때를 알지 못합니다. 여기서 사용하지 않아야합니까? ?

TIA

+2

valgrind를 사용하거나 코드를 더 게시하십시오. – BatchyX

+0

고마워,하지만 난 내가하지 않는이 작품을 알고 싶어? – Arash

+0

'x.insert (x.begin() + i, i)'로 무엇을하고 싶습니까? '내가'여기 무엇입니까? 왜 당신은'x.push_back (i)'을 사용하지 않는가? –

답변

0

당신은 벡터의 크기를 정의하지 않았다고합니다. 즉 크기가 0임을 의미합니다. 이 경우

,이 코드

x.insert(x.begin()+i,i) 

제로 이외의 i에 대해 유효하지 않습니다.

+0

와우 덕분에 고정 크기의 벡터를주고 싶다면 어떻게해야합니까? 크기보다 크거나 작을 수 있기 때문에 무엇을해야합니까? – Arash

+0

크기 고정되어 있지 않으며 언제든지 변경 될 수 있습니다. 벡터 외부에 아무것도 삽입 할 수 없습니다. 마지막에 다른 객체를 추가하려면 해당 객체를위한'push_back' 함수가 있습니다. 아니면'resize'를 호출하여 크기를 변경할 수 있습니다. –

+0

감사합니다,하지만 vec [5]에 예를 들어 5를 삽입하고 싶습니다. 그래서 어떻게해야합니까 ?? – Arash

3

이 (코드를 보지 않고) 그냥 추측이지만, 그냥이에서 배열을 대체 않았다

// some code 
std::vector<double> array; 
// use array somehow 
delete [] &array[0]; 

이에

// some code 
double *array = new double[ 50 ]; 
// use array somehow 
delete[] array; 

?

가장 좋은 방법은 valgrind를 사용하여 프로그램을 실행하는 것입니다.이 프로그램은 valgrind를 사용하여 어떤 줄이 문제인지 정확히 알려줍니다.

+0

예, 답을 같이 사용합니다 – Arash

+0

@arash이 경우'delete []'로 줄을 제거하면이 문제를 해결해야합니다. 힙에 할당하지 않는 한 벡터를 삭제할 필요가 없습니다. –

관련 문제