2012-05-23 3 views
0

프로그래밍으로 다시 돌아가고 있습니다. 매우 바보라면 용서하십시오.변수가 C++에서 클래스 간 범위를 벗어납니다.

나는 2 개의 클래스가 있습니다 (당분간). 하나는 Windows Form 클래스이며 Button_Click 이벤트를 사용하여 통신 포트 열기를 트리거합니다. 사용자가 양식에 입력 한 데이터를 추가 처리 (송신)를 위해 Communication 클래스에 전달하려고합니다. 이는 통신 클래스를 초기화하고 호출하는 부분이다 :

wchar_t * data = new wchar_t[nLength]; 
    *data = *wch; 

    SerialCommunication comm1; 
    bool comm1ok = comm1.SerialWrite(data); 

변수 "데이터"포인터, 그래서 내가 사용하는 다른 클래스에 해당 주소를 전달하려는. 이 제 2 클래스 :

bool SerialCommunication::SerialWrite(wchar_t * datar){... 

하지만 데이터는 거기 수 없다. SerialWrite() 함수가 시작되면 즉시 범위를 벗어납니다. 클래스 사이를 이동할 때 포인터가 사라지지 않도록 다른 방법으로이 포인터를 선언해야합니까?

수업은 모두 공개입니다. 제가 아는 한 (물론, 저는 SerialCommunication을 썼습니다. 그래서 공개입니다).

내가 뭘 잘못하고 있니? 무엇을 바꾸어야합니까?

감사합니다.

답변

4

이 :

*data = *wch; 

당신이 생각하는 (또는 당신이 생각하는 가정 무엇을)하지 않습니다. wch의 첫 번째 요소를 data의 첫 번째 요소에 복사합니다.

+0

사실, 항상 한자리 수를 입력했기 때문에 눈치 채지 못했습니다. 나는 그것을 고치기 위해 노력할 것이다. 그러나 그것은 내 변수가지나 가지 않는 상황에 영향을 미칩니 까? – Mewa

+0

@Mewa : 포인터가 범위를 벗어나지 만, 상관 없습니다. 왜냐하면'new'로 할당 한 메모리가 삭제되지 않기 때문입니다 (당신이'delete []'를 호출하지 않는다면!). –

+0

감사합니다! 디버거가 범위를 벗어난다고 제게 말하면 계속 그 값을 읽을 수 없을 것이라고 생각했습니다. 그것은 잘 작동하지만. char *와 strcpy_s를 사용하여 원래의 문제를 바꿨습니다. – Mewa

관련 문제