Q&A

  • nil 키워드를 사용해서 메모리 해제
어떤 구문을 보니
var
sa : array of String;

begin
SetLenth(sa, 33);
sa[0] := '델파이';
OtherString := sa[0];

sa := nil //sa를 해제한다.

위에 구문은 무슨뜻이에여?
nil이 값을 가지고 있지 않다는 그런 것이라서 sa변수의
메모리에 아무런 값도 가지지 않게 하는것인가여???
잘 이해가 안가거든여

답변 감사하구여 다시 한번 부탁드립니다.
1  COMMENTS
  • Profile
    한원희 2002.08.26 23:19
    안녕하세요. 한원희입니다.

    델파이의 string 형은 문자열의 길이와 문자열에 대한 참조값을 같이 가지고 있습니다.
    하나의 문자열을 다른 변수로 복사를 하게 되면, 문자열의 실제 데이터를 복사하는 것이 아니라,
    원래 문자열에서 참조값을 1 증가시키고, 복사할 변수의 포인터도 원 문자열의을
    가리키도록 하는 구조로 되어 있습니다.
    예를 들면,

    str1:='Hello Delphi...';
    str2:=str1;

    이런식으로 문자열을 복사하면, str1과 str2가 가리키는 문자열 주소는 같습니다.
    대신 해당 주소의 참조 값이 2가 되어 있는 거죠.
    이런 구조에서 문자열 변수에 nil을 넣는 다는 것은 참조수를 1 줄이는 것입니다.
    그래서, 그 문자열에 대한 참조수가 0이되면 해당 문자열을 메모리에서 해제하게 되죠.
    그래서 nil을 문자열이 사용하고 있는 메모리를 해제하는데 사용할 수 있는 것입니다.

    덧붙여서, 위의 예에서, str2에 문자열을 조작하게 되면, 그 때서야 비로소 str2를 위한
    메모리를 따로 할당하고 그곳에 str1의 실제 문자열을 복사한 후, 변경된 내용을 적용하게 됩니다.
    그리고, str1의 참조수가 1 줄고, str2 변수의 참조수가 1이 되죠... ^^;

    음.. 말로 풀어 쓰려니 어렵군요...
    답변이 되었을지 모르겠네요... ^^;

    • 김종균
    • 2002.08.26 23:09
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 한원희
      2002.08.26 23:19
      안녕하세요. 한원희입니다. 델파이의 string 형은 문자열의 길이와 문자열에 대한 참조값을 같이 가지고...
    • 김경민
    • 2002.08.26 21:13
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 이승근
    • 2002.08.26 21:11
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 홍성락
      2002.08.26 21:18
      hsr/////////////////////////////////////////////////// 아래처럼해보세요 ComboBox1.ItemIndex := Com...
    • 김경민
      2002.08.26 21:18
      방법상에 문제가 좀 있는것 같군요 table record가 변할때 combobox에 보여줄려고 하는것 같은데 table에...
    • 나옹이
    • 2002.08.26 20:59
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 나옹이
      2002.08.26 23:45
      procedure TForm1.Button1Click(Sender: TObject); begin with ZipMaster1 do try ZipFileName :...
    • 박상기
      2002.08.27 00:52
      C:test.txt <==============요거 맞나요? C:test.txt가 맞을 듯....
    • 나옹이
      2002.08.27 01:07
      C:test.txt 일케 했는데요... ZipFileName := 'c:ZipTest.zip'; 일케두 바꾸공.... 걍 주거버리내...
    • 나옹이
      2002.08.27 01:13
      디렉토리를 하니깐....잘 되는뎅.... test.txt 라고 파일 하나만 압축하라고 지정하니깐...못하네요... ...
    • 안경훈
    • 2002.08.26 19:41
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 2002.08.26 22:03
      var   Series1 : TLineSeries; begin   Series1 := TLineSeries.Create(Chart1); ...
    • 양종석
    • 2002.08.26 19:40
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 강혁진
      2002.08.30 22:33
      ================================================ 한델에서 답변이 없어서 다우교육장인 키미아카데...
    • 홍성락
      2002.08.26 22:50
      hsr/////////////////////////////////////////////////////////// 위 소스에서 버튼 위치가 아니러 커서 ...
    • 델파이사랑
      2002.08.26 23:33
      갈수록 델파이가 재미있어지네여.........ㅎㅎㅎ
    • 델사랑
    • 2002.08.26 18:29
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 한원희
      2002.08.26 23:02
      안녕하세요. 한원희입니다. 스크롤바 메시지 중에, WM_VSCROLL 메시지가 있습니다. 스크롤바를 움직일 ...
    • 김종균
    • 2002.08.26 11:26
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 바다를향해
      2002.08.26 23:16
      정확한 답변이 될런지는 모르겠지만.... 예를 들어서 NULL 은 코엑스에 가보니 코엑스몰이 없더라는 것...
    • 한원희
      2002.08.26 22:58
      안녕하세요. 한원희입니다. Null은 Variant 타입에만 적용되는 것으로 Nil과는 용법이 다릅니다. 다른 ...
    • 이추형
      2002.08.28 02:19
      일단 실시간으로 데이타가 쌓이는 테이블에 대해서 Range Scan은 잘 사용하지 않는것으로 압니다. 왜냐하...
    • YoungMan
      2002.08.26 05:23
      테이블 이나 쿼리 컴포넌트 위에서 마우스 오른쪽버튼 눌러서 필드에디터를 부르시면 DisplayFormat라는 ...
    • 이성근
    • 2002.08.26 03:54
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 한원희
      2002.08.26 23:13
      안녕하세요. 한원희입니다. 제가 보기에는 마이다스의 ClientDataSet으로 로컬 DB를 만드신 후에, 이를 ...
    • 김헌대
    • 2002.08.25 20:26
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 이민수
      2002.08.25 21:37
      바코드가 어떤건지 잘 모르겠는데여... 버튼같은거 클릭해서 이벤트 뼈대 만드신 다음에 barcode1 ...
    • 김헌대
      2002.08.25 23:58
      제가 쓰는건 Zbarcode인데여.. 소스봐도 잘모르겠어여.. 워나기 초보라서.. 아마두.. 소스보면 이런부...
    • 이민수
      2002.08.26 07:56
      이건 컴포넌트를 실행시에 동적으로 생성해서 사용할 때 필요한거구요 디자인할 때 폼에 추가시킨 것은...
    • 유성욱
    • 2002.08.25 08:58
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 하얀까마귀
      2002.08.25 11:49
      안녕하세요 하얀까마귀 입니다. 넘 어렵게 생각하신것 같네요.. 그냥 간단한겁니다. var  &nb...
    • 유성욱
      2002.08.26 08:58
      ^^ 감사합니다.  제가 초보라서 한가지만 더 여쭤볼께요 역변환은 어떻게 하죠. 어떤 함수...
    • 유희철
    • 2002.08.25 07:42
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 하얀까마귀
      2002.08.25 11:53
      안녕하세요 하얀까마귀 입니다. SDI 라면 간단하게 폼에서 코드몇줄 써주시면 될것 같네요.. 폼에 보...
    • 유희철
      2002.08.25 22:14
      답변 감사드립니다 님두 즐거운하루되세요 ^ ^
    • 조걸
    • 2002.08.25 06:02
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 하얀까마귀
      2002.08.25 12:02
      안녕하세요 하얀까마귀 입니다. 딱히 답변이라고는 못하겠고.. 프로그래밍 하면서 좀 기분나쁜게.. ...
    • 이민수
      2002.08.25 08:41
      대개 컴포넌트를 쓰면 편합니다. 폼모양 바꾸는거, 타이틀바 없애거나 버튼추가/제거하는거, 테두리...
    • 하병준
      2002.08.26 21:28
      움 디자인이라면 스킨엔진이라는 컴포넌트가 잇씁니다.~ 원하는 (버튼,폼 패널, 등등의 여러 컨트롤)의 ...
    • 최용일
      2002.08.24 22:47
      안녕하세요. 최용일입니다. WM_NCLBUTTONDBLCLK메세지를 이용하세요... type    &nb...