2014-01-12 3 views
1

하지 않았는데 C++ 기능은 변수를 파괴하고 그것은 임시 배열에 배열을 복사 삭제하고 원본을 재현하여이를 수행 더 큰 크기. 내 문제는 내가 함수를 실행할 때 구조체 내의 모든 내 값이 '-17891602'가된다는 것입니다. 내가 틀렸다면 저를 고치십시오. 그러나 이것이 변수가 삭제 된 때를 보여주는 값이라고 생각합니까? 나는 그 문제를 알아낼 수 없다. 그러나 여기에 정의가 있습니다.는이 기능의 목적은 구조체를 가지고 가고, (1)에 의해 배열을 확대하는 것입니다

void Array::addValueStruct(int id, int size, int type, int compareValue, StoredData temp[]) 
{ 
    //struct 
    StoredData* tempStruct = new StoredData [arrSize+1]; 
    for (int i=0;i<arrSize;i++) 
    { 
     tempStruct[i] = temp[i]; 
    } 

    arrSize = arrSize + 1; 

    delete [] temp; 

    temp = tempStruct; 

    temp[arrSize-1].id = id; 
    temp[arrSize-1].size = size; 
    temp[arrSize-1].type = type; 
    temp[arrSize-1].compareValue = compareValue; 
} 

또한이 방법이 유용 할 지 모르지만 함수 호출.

test.addValueStruct(5,5,5,5,testData); 

업데이트 : 문제가 해결되었습니다.

+0

어디 arrSize는 선언? 누가 그것을 사용할 수 있습니까 ?? – Netwave

+0

어떻게 함수를 호출합니까? 인수로 전달하는 변수를 어떻게 선언/초기화합니까? –

+0

arrSize는 cpp 파일의 맨 위에 전역으로 선언됩니다. 전에 클래스 배열에 성공적으로 사용했기 때문에 이것이 문제라고 생각하지 않습니다. – WorldsWorstProgrammer

답변

1

문제 배열 포인터 값만큼 함수로 전달된다는 것이다. 즉, 다른 배열을 가리 키도록 다시 할당하면이 변경 사항이 호출자에게 다시 전파되지 않습니다.

당신은 포인터 또는 참조를 기준으로 중 하나를 통과해야합니다.

1

당신은 값으로 temp을 전달하고 있습니다. 따라서 addValueStruct은 자체 복사본을 가져오고 그에 대한 변경 사항은 해당 기능 범위 외부에서 볼 수 없습니다.

temp = tempStruct; 

여기 만 temp 변수의 로컬 복사본을 변경 :

1

문제는 아마 여기이 선입니다. 호출에 사용 된 변수를 수정하려면 참조로 전달해야합니다.