2014-01-23 4 views
0

C++에서 Vector 클래스를 만들고 있는데 문제가 있습니다.크기 4 배열의 쓰기가 잘못되었습니다.

==23391== Invalid write of size 4 
==23391== at 0x401CAB: IntVector::IntVector(int, int) (IntVector.cpp:35) 
==23391== by 0x401009: main (main.cpp:36) 
==23391== Address 0x4c25218 is 0 bytes after a block of size 200 alloc'd 
==23391== at 0x4A07152: operator new[](unsigned long) (vg_replace_malloc.c:363) 
==23391== by 0x401C7F: IntVector::IntVector(int, int) (IntVector.cpp:32) 
==23391== by 0x401009: main (main.cpp:36) 



IntVector::IntVector(int size, int value){ 
capacity = INITIAL_CAPACITY; 
while(size >= capacity) 
{ 
    capacity = capacity*2; 
} 
if(size < 0) 
{ 
    count = 0; 
    array = new int[capacity]; 
} 
else 
{ 
    count = size; 
    array = new int[capacity]; // line 32 
    for(int i = 0; i < count; i++) 
     { 
      array[i] = value; //line 36 
     } 
} 

왜 내가 배열을 읽거나 쓸 수 있습니까? 메인에서 나는 v1(5,0)initial capacity = 50을 선언하고 루프는 단지 4로 이동하므로 50을 지나서 읽거나 쓰는 것이 불가능합니다!

+0

'i'를 루프에 인쇄 해보십시오. – Barmar

+0

게시 한 정보의 코드와 스 니펫에서 [이 테스트 케이스] (http://ideone.com/vYpa8B)를 Valgrind에서 오류없이 실행할 수 없습니다 (또한 '50 '를 당신의 편집 당'capacity '와 함께). 아마도 완벽한 테스트 케이스를 게시 할 수 있으므로 입력 내용이 실제로 생각한대로 표시 될 수 있습니다. –

+0

테스트 케이스는 어디에 있습니까? –

답변

1

해서는 안이

새로운 배열 = INT [50]; // line 32

this this?

array = new int[capacity];