2010-02-16 2 views
0

2 개의 문자열 매개 변수를 허용하는 프로 시저가 있는데 그 중 하나에는 기본값이 있습니다. 프로 시저 내에서 하나의 문자열과 다른 하나의 문자열을 연결하여 하나의 큰 문자열을 형성하려고합니다. 어쨌든, 나는 AV를 얻고있다. 어떤 생각? 내가 GlobalConstant + ' (' + s1 + ')s3에, 다음 s3는 AV가 사라 s2에 할당 할당하는 경우D2007에서 문자열을 연결할 때이 액세스 위반의 원인은 무엇입니까?

코드는이

{$WRITEABLECONST ON} 
constructor MyClass.Create(s1: string; s2: string = GlobalConstant); 
var s3: string; 
begin 
    .... 
    if (s2 = '') then s2 := GlobalConstant + ' (' + s1 + ')';  // AV here 
    .... 
end; 

같은 것입니다. 왜? 문자열 매개 변수에 직접 쓰는 것이 잘못된 이유는 무엇입니까?

+0

제공하신 코드를 사용하여 d2007로 복제 할 수 없습니다. – glob

+0

해당 코드에는 아무런 문제가 없습니다. AV가 왜 그렇게 될지 상상하기 어렵습니다. ia "GlobalConstant"가 어떻게 선언 되었습니까? –

+0

@ 닉 호지스. 나는 코드가 다른 반복에서 작동하기 때문에 잘 선언 된 것을 안다. 어제는 6 번째 반복에서 실패했습니다. 오늘은 3 일에 실패했고 ... 다른 곳에서도 AV가 있었기 때문에 Paul-Jan의 답변에 기대고 있습니다. 뭔가 다른 것입니다. 어쨌든 Nick, 고맙습니다. – Sam

답변

6

다른 코드 코드가 잘못되어 해당 위치에서 액세스 위반이 발생합니다 (손상). FastMM을 FullDebugMode과 함께 사용하여 그게 뭔지 파악하고 해결하는 방법을 찾아보십시오.

+0

@ Paul-Jan, 감사합니다. 나에게 그럴듯한 소리가 들립니다. 나는 그것을 시도하고 내일 다시보고 할 것입니다. – Sam

+0

나는 당신이 링크를 제공 한 페이지와 그것을 추천하는 페이지를 읽었습니다. FastMM4, FullDebugMode 사용 (FastMM4OptionsInterface GUI 사용), UseDebugDCUs, 스택 프레임, 로컬 기호, 참조 정보 ... 프로젝트를 다시 작성하고 실행했지만 로그 파일을 가져 오지 못했습니다. 찾을 수 있습니다!) 또는 모든 MessageBoxes. 나는 여전히 AV를 얻지 만, 이제 코드는 클래스 함수 TObject.InheritsFrom (AClass : TClass) : Boolean; WIN32 \ RTL \ SYS \ System.pas에 ... :-) 어제 머리카락이 가득차 있었는데, 내일까지 모두 사라질 것입니다! – Sam

+0

.maps 파일을 만드는 것을 잊었습니다. 프로젝트 옵션 - 링커 - 상세 맵 파일. (어서, 초보자를 유감스럽게 생각한다.) – Sam

관련 문제